メモ

調べたり思いついたりしたことをメモします

BluetoothヘッドセットM70を買って一か月後のレビュー

Sony XPeria Z-Ultra というファブレットを使っています。6.4インチほどもありネットやゲームに使う分には申し分ないのですが、電話での音声通話はなかなか使いづらいです。 大きいせいでスピーカ位置が分かりにくく、Z-Ultraのどのあたりに耳を当てれば聞こえやすい位置にヒットするか分かりにくいのです。 相手の声が全然聞こえないなぁと思ったらスピーカ位置から耳がずれていたり、というのが頻繁にありました。 一応電話もできる、という程度の小さめのタブレットだと理解するのがよいでしょう。

さて、こういう時にワイヤレスのヘッドセットがあると便利です。 plantronics というメーカが出している M70 というモデルを買ってしばらく使ってみましたので感想を書いておきます。


電池持ち

良い感じです。 連続通話は11時間程もあり十分過ぎます。待ち受けだけなら2週間ぐらい持ちます。

実際11時間も使いませんし、2週間を待たずして週末等なんとなく充電しちゃったりして、電池が切れそうな不安感を感じたことが一度もありません。 一週間に一回ぐらい充電していますが今のところ問題なしです。

本体に電源スイッチがあり、使わないときはOFFにできます。 夜寝る前などOFFにしておけばよいでしょう。

接続の速さ

一番気になっていたのが接続の速さです。 音声着信に気付いてから、ヘッドセットを装着して「もしもし」「はいはい」が通るまでに何秒ぐらいかかるかです。これが遅いと電話相手に悪いですし。

常時電源ONが前提なので、何秒もかかりません。着信したらM70に音声ガイダンスで着信がすでに知らされており音声はすでに疎通した状態です。そのあと着信に応答して通話状態になった瞬間からすでに音声は通っています。

電源OFF状態だったとして、ONにしてからの所要時間はだいたい5~7秒程度。電源スイッチを入れると音声ガイダンスが流れます。 「電源ON。連続通話時間xx時間。携帯電話1が接続されました」 というメッセージです。このメッセージが終わった時には音声が通る状態になります。

着信してからONにしてもなんとかなりますが、少々タイミングが悪いので普段はずっとONにしておくべきです。

音質

ハイレゾ音源の音楽を聴きたいのであれば厳しいです。音声通話や、ゲームのサウンドを流し聴きする程度なら問題ありません。

ただちょっとボリュームに不安があります。雑踏の中で通話したときボリュームを最大にしてちょうどぐらいでしたので、さらにうるさい環境下だったら音量不足を感じるかもしれません。私の通常利用シーンでは問題ありませんでしたが、もう少し音量にゆとりがあってもいいのではと思います。

総評

かなり気に入って使っています。とても軽いのでストラップにくっつけて持ち運びできます。充電が長持ちするので気兼ねなく常時ONにしておけるので、使いたい瞬間に即座に使えます。安くて軽いけど、質感はそれほど安っぽくもないのでお買い得と言えるのではないでしょうか。

IPSの4Kモニタ (P2715Q-C) を購入しました

テレビではまだまだ4Kコンテンツがないようですが PC の用途では4Kモニタはとても有用です。 だいぶ値段もこなれてきたので購入してみました。 Dell の P2715Q というモデルです。Amazonで6万を切る値段で手に入ります。これです。

4Kの使いどころはなんといっても広い画面。エクセルの編集画面の広いこと広いこと。一度使うともう戻れません。これを経験してしまうとFullHDのモニタがチープに見えてしかたないです。エクセルや画像編集、IDE とかで開発する人ならそれだけでも大いに価値があります。文字が小さくなるのですが小一時間も触ってるとすぐ慣れました。小さいとはいえ鮮明なので思ったより見づらくないんですよね。Windows8.1のコントロールパネル -> ディスプレイ -> すべての項目のサイズを変更する で、テキストやアイコンなどの標示物を拡大して表示してくれる機能があるのですが、結局標準のままで使うことにしました。

もともとは23inch(FullHD)のデュアルモニタで使っていたのですが、4Kが来たことによりコレ一枚で十分な面積があるのでシングルモニタにして机をスッキリさせることにします。 個人的に Dell は安物のメーカかという印象が(すみません)あったのですが全く問題ないですね。発色も応答性能もまったく問題を感じません。前まで使っていたナナオの FS2333 と並べてみていますが遜色ありません。FS2333 は売りに出す予定です。

付属品は、mDP-DP、USB3.0ケーブル、電源ケーブル、設定の紙、ドライバディスク、裏蓋 です。リモコンはありませんがBrightnessの設定などはPC上で簡単にできますので不便はありません。リモコンきらいだったんですよね。手の届く位置にあるPCモニタにリモコンなんていらないです。 f:id:uenoshin:20150221030851p:plain

注意点が幾つかありますのでそのことを書いておきたいと思います。

  • DisplayPort

まず、接続には DisplayPort が推奨です。 HDMIやDVIだと転送速度が足りずリフレッシュレートが30Hzになってしまうので少しもたつく感じがします。 DisplayPort で接続すれば 4K・60Hz で表示できるようになります。

  • グラフィックボード

グラボは4K・60Hz対応のものを選びましょう。私は GeForce GTX 660Ti というちょっと古いものを使っているのですが問題なく行けました。

  • MST

P2715Q の前面ボタンで メニュー -> ディスプレイ -> MST を「オフ」にしておく必要がありました。これがオフ以外のものになっていると私の環境では 60Hz に設定できず 30Hz になってしまいました。帯域が足りないためでしょうね。

そのほかは特に触る設定もなくあっさり綺麗な表示ができました。

Fx0発表会に参加してきた

f:id:uenoshin:20141223175406j:plain

12/23(火) ベルサール渋谷ファーストにてKDDIのFirefoxOSスマートフォン「Fx0」の発表会に参加しました。この発表会は田中社長からのプレス発表だけではなく、集まったたギークたちの手で作った作品の発表もありました。Fx0やFirefoxOSを用いて何が出来るかを示すハッカソンが舞台裏で行われていたのです。今回そのハッカソンメンバとして製作に加わりましたので内容を紹介します。

私はこれまで通信キャリアはオープン系の活動に熱心ではない印象を持っていたのですが、大きく変化が起こってきているのだと考えを改めました。大企業と個人が、ビジネス上の損得もなしにweb技術の浸透に寄与しようという想いを共有できたのは大きな変革です。

ハッカソンメンバは全員が個人意思で参加した一般人ボランティアです。会社員もいればフリーランスもいて属性はバラバラです。新製品のプレス発表のようなしっかりしたイベントをこういう寄せ集めメンバで運営するのは高度なマネジメント力と人間力が必要だと思いました。多くのことを学ぶことができたイベントでした。

(ハッカソン会場の風景)

f:id:uenoshin:20141223154732j:plain


(司会者)

f:id:uenoshin:20141227134112j:plain

ハッカソン発表の司会進行は女優の池澤あやかさんでした。ギークな女優として有名だそうです。申し訳ないのですが私は芸能人に詳しくないので・・全然知りませんでした。。

f:id:uenoshin:20141223200719j:plain

ハッカソンは3チームで構成され、私はシマダイチームに所属していましたのでシマダイチームの技術紹介をします。私はソフト開発を主に担当しました。

ドローンを飛ばす

f:id:uenoshin:20141227134221j:plain

サンタがドローンでプレゼントを運ぶ演出です。さすがに重くて運べないのでトナカイさんの役割が重要だったというストーリの流れになり、ドローンはその後ビデオカメラとして使います。

ドローンはiOSAndroid向けに操作アプリが出ていますが、FirefoxOS向けにはありません。APIは明確でしたのでFirefoxOS向けに操作アプリを作りました。 ドローンはWiFiのAPになっているのでスマホはまずドローンWiFiにぶら下がります。そしてドローンに対してUDPで操作コマンドを出す仕組みです。しかしFirefoxOSにはmozTCPSocketのようなTCPはありますがUDPプロトコルスタックがありません。それを追加したのが工夫ポイントのひとつです。 ドローンの飛行に関してはワールドビジネスサテライトの取材で実際に映像がテレビでも放送されましたので、下記リンクで動画を参照ください。*1

http://www.tv-tokyo.co.jp/mv/wbs/newsl/post_81387/

(撮影の様子)

f:id:uenoshin:20141223191526j:plain


照明を点灯する

f:id:uenoshin:20141227134242j:plain

ドローンが近くまで飛んでくればクリスマスツリーに明かりが灯る演出です。 ドローンにBLEのビーコンを取り付けておき、OpenWebBoardがそのRSSIを読み取ることで近づいたかどうかを検出します。OpenWebBoardはBluetooth4.0(BLE)に対応しているので利用できました。

OpenWebBoardにはUSBでArduinoを接続しました。OpenWebBoard側にシリアルデバイスドライバを入れてinsmodし、あとはmozTCPSocketを使ってポート9943に接続すればシリアル通信が実現できます。こちらの記事を参考にさせて頂きました。 http://flatbird.github.io/2014/11/05/owb-serial/

ArduinoにはIrモジュールを取り付けてあります。これは特定パターンで明滅させる事でリモコンとしてのコマンド送信を代行できます。つまりよく家電で使われる赤外線リモコンになるわけです。ツリーに付ける照明には赤外線リモコンでOn/OffできるリモコンコンセントOCR-05を使いました。これです。

ドローンがOpenWebBoardに近接するとArduinoを経由してIrモジュールにリモコンコマンドが出され、電源がOnされる仕掛けです。

FirefoxOSのBLEの制御方法としては mozBle というのがOpenWebBoardに用意されていました。使い方説明が無いので少々難儀しましたがサンプルのアプリを解析することでなんとかなりました。

f:id:uenoshin:20141227165326j:plain


音楽を届ける

f:id:uenoshin:20141227134313j:plain

WoTでサーバ側から音楽や体験を届けるという演出です。Fx0のポイントのひとつであるWebCast技術の応用です。

スマホからスマホNFCを使ってURLを渡します。受信側スマホは渡されたURLへHTTPでアクセスすることでデータを受信できます。この場合audioタグの書かれたhtmlを受信させました。 送信側スマホNFCでURLを送るだけではなく、HTTPサーバをも兼ねています。htmlも音楽データも送信側スマホに入っているのです。 HTTPサーバは 「httpd.js」Fx0をWebサーバ化するライブラリ-Creator Showcase を使っています。 データ転送量がそれなりに大きかったので通信環境の不安定さに苦労しました。

あらかじめペアリングしてあったBluetoothスピーカから音楽が出力されるという仕掛けです。

f:id:uenoshin:20141227165458j:plain


ハンドベルを鳴らす

f:id:uenoshin:20141227134424j:plain

スマホからの遠隔操作でハンドベルを鳴らす演出です。 デバイスがWebにつながることは、空間を超え、Real/Virtual の溝も超えて実世界に影響することを可能にします。シマダイチームは全体を通して「サーバからの送信で体験を届ける」というテーゼを持っており、その意味では音楽とハンドベルのギミックはその中心的な役割に相当します。

スマホからスマホへ渡したアプリ(html)のbutton要素のアクションで、送信側スマホ(サーバ)を経由し、緑の箱の中に仕込んだOpenWebBoardへコマンドが行きます。これにはGluinの技術を流用しました。つまりwebSocketです。OpenWebBoardはArduinoにつながっており、Arduinoはモータ2個(SG90を使用)と接続しています。このモータの動力でハンドベルを動かしています。

給電にはモバイルバッテリーを使用しました。最初はモータ3個をつなげていたのですが3個同時に駆動するには電力が足りないようで2個になりました。IoT、WoTは電源供給が課題ですね。


ハコを開く

f:id:uenoshin:20141227134649j:plain

ハンドベルと同じ技術です。SG90でハコの留め金を外すとフタが開く仕掛けです。異なるIDを割り振ったデバイスに向けてコマンドを飛ばすことでハンドベル・ハコを制御し分けています。中心的な司令塔となるサーバも実体はスマホです。これらの演出にPCやクラウド上のサーバは使っておらずクローズドなネットワーク内にスマホとOpenWebBoardをつなげて実現しました。

ハコの中にはタイガースの衣装を着せたフォクすけを入れてありました。従来系世界観によるプレゼントの在り方です。

音楽や体験をそれぞれWoTの世界観で届けることをモチーフにした発表にしたつもりですが、発表会の制限時間がたいへん短かったこともあり意図を正確には伝えきれなかったかもしれないですね。

f:id:uenoshin:20141227165533j:plain


苦労した点ですが、なんといってもwifiです。Mozilla CTOの Andreas Gal氏も講評で仰っていましたように、現場は2.4GHz帯の無線が入り乱れておりさっぱり安定しません。舞台裏の壁際ぎりぎりまでAPを持ってきても不安定は変わらず。速度が遅いだけならまだしも切断されるのはデモの大敵でした。ハッカソンチーム毎に使用チャネルを寄せる工夫は取られていましたが観客席の方からもモバイルwifiの電波が多数飛んできていますので効果は薄かったようです。

あと、OpenWebBoardの仕様で苦労しました。入れたアプリを起動するには画面とマウスが不可欠なのです。USBで電源供給をするだけでOSが起動するのはいいのですがその後アプリを立ち上げるには画面+マウスにつながなければなりません。立ち上げたあと画面+マウスを外して仕掛け箱にセットする、という作業に気を使いました。 B2G_HOMESCREEN環境変数にアプリURLを設定してしまってオートスタートできるようにしようとトライしたのですがうまく行かず。mozTCPSocketやmozBluetoothを使用している箇所でパーミッションエラーが出てしまい起動できない現象に悩まされ時間内では解決できませんでした。ちゃんとCertifiedアプリとしてmanifestも書いたのですが・・。


最後に、KDDIやハッカソンチームのみなさま、おもしろい活動の場をありがとうございました。 これからもFx0・FirefoxOSでいろいろ作っていきましょう!

f:id:uenoshin:20141223200604j:plain

*1:現在は既にリンク切れになっています

MDNの翻訳

この記事はMDNやFirefox OSのドキュメントをみんなで翻訳! Advent Calendar 2014 - Adventarの13日目です。

MDNの翻訳のやり方その他は Advent Calendar の他の方々が丁寧に解説されているので、私は翻訳にまつわる感想を書こうと思います。

私は英語ができないのでMozilla系のドキュメントをMDNで見る際、日本語翻訳版を見ることが多いです。しかしながら、MDNの日本語はあまり充実しているとはいえず、最新状況への追随もちょっぴり遅れている感があります。日本語版と英語版を見比べるとだいぶ違うことが書いていることもしばしば。 特に FirefoxOS のGaia、webapi、開発ツール関係あたりは進展が早く、日本語化されていてもたちまち古くなってしまうイタチごっこが続いている気がしてなりません。 とはいえ国内のアプリ開発人口を増やさなければFirefoxOS界隈は勢いを失うでしょうので、国内向けの正しい知識の共有化は喫緊の課題であると思います。

私もいろいろ調べ事をするときにはやむなく辞書を片手にMDN英語版に頼っています。というかこれのためにAndroid版の辞書アプリを買いました。それまではWeblioやYahoo、excite、googleあたりの翻訳サービスを使っていましたが、辞書を買ってみて実感しました、ちゃんとした辞書で用例や熟語、慣用句を調べられるのって素晴らしい。使っているのはwizdomの辞書 です。 時々落ちたりしますしアプリとしての品質はそれほど高いとはいえませんが、辞書としては秀逸だと思います。お手軽に単語を調べる時にはFirefoxブラウザのアドオンのQuickTransratorを使っていますが、ちゃんとした辞書をひく習慣は大切なものです。情報量が圧倒的に違います。

で、MDNの翻訳についてです。翻訳結果の更新はwikipediaを編集するような感覚でお手軽に書き込めるようになっています。しかし問題は編集操作ではなく翻訳の中身です。1ページまるまる翻訳しなくても徐々に書き加えていくやり方でも大丈夫なので、私の場合は調べ事をする都度、そのページの調べた部分を書き記していくようにしています。これまでいくつかのページを翻訳しましたがページまるまる全部しっかりやりきったことは少ないです。すみません。例として下記のようなページを編集しました。英語力があまりに稚拙で大変恐縮なのですが自分で読んだことを残していければ今後人の役に立つのではと思いつつやっています。

Device Storage API - Web API インターフェイス | MDN

Firefox OSをデバッグする - Mozilla | MDN

将来、機械翻訳の精度が一層高まればこのように人力で翻訳を更新していくこともなくなるのでしょうけど、コンパイラのような高精度な機械的変換ができるのはまだまだ遠い未来の技術ではないかと思います。まず技術の発信源はほとんど英語圏ですので、技術者たるもの英語ぐらい読み書きできるようになりたいものですね。

Open Web Board の BLE

11/15に大阪でハッカソンがあり、Open Web Board というものをもらってきました。

f:id:uenoshin:20141206002353j:plain

右上の小さいUSBが給電用で、左のHDMIでモニタに接続して画面出力できるようになっています。 メモリ1G、ストレージ8G、Bluetooth4.0対応、WiFi802.11b/g/n対応、など盛りだくさんです。Androidスティック並みの小さいサイズなのにがんばってますね。発熱するらしいので専用ケース付きでした。 OSは FirefoxOS v1.4 だそうで、ちょっとだけ古いです。最新に入れ替えてみたくてうずうずします。

HDMIで画面につながるのですがタッチパネルでないのでマウス必須です。写真右下のUSBのクチはマウス専用になりそうですがBluetoothマウスを使ってもいいかもしれません。 RaspberryPi や Flame とは何が違うだろうかという点が気になりますが、やはりこのボードはBLEがポイントになるように思ったのでBLEをどう実装しているのかちょっとだけ調べてみました。

BLEデモというアプリが予め入っているので adb pull でこれを吸い出して中身を展開します。 bleclient.gaiamobile.org という名前で入っていました。 デモという名前だけあってかなり軽量でシンプルなアプリでした。

使っている主なオブジェクトは3つあります。

  1. navigator.mozBluetooth

  2. navigator.mozSettings

  3. navigator.mozBle

1,2は普通に既存実装されている BluetoothManager と SettingManager です。 3つめの mozBle だけは mozilla-central や mozilla-aurora にも見当たりませんので、おそらく独自拡張かと思えます。 この mozBle にどんな機能があるか気になるところですが Gecko 側の webidl や C++ソースもありませんし、当然MDNにも乗っていないので現状はこのデモアプリのJavaScriptソースから読み解くしかなさそうです。

ble_demo.js上で使われているメソッドは次の通りでした。

registerClient()
unRegisterClient()
connectBle()
disconnectBle()
searchService()
getIncludeService()
readRemoteRssi()
executeWrite()
scanLEDevice()
registerForNotification()
getCharacteristic()
readCharacteristic()
writeCharacteristic()
getDescriptor()
readDescriptor()
writeDescriptor()

メソッドの名前からおおよそ推測するしかありませんが、Gattプロファイルに準じたR/Wができるようです。

Bluetooth GATT | Specifications | Bluetooth Development Portal

また、この mozBle はなぜかイベントハンドラを持ってないようです。 代わりに BluetoothAdapter に対してMDNに記載のないハンドラを登録している処理があったので、BluetoothAdapter に対しても拡張が加えられているのかもしれません。 BluetoothAdapter - Web API Interfaces | MDN

今日現在ではAPIが公開されていない(少なくとも私は発見できていない・・)ようなので実際にBLEを使った作品を作ってみるにはデモアプリを解析しながらやるしかないようです。といっても割と分かりやすいデモアプリだと思いますのでそれほどハードルは高くないでしょうけど。 年末年始の休みにはなにか作ってみたいのでそれまでに公開があることを期待したいと思います。

FirefoxOSビルド環境用の Dockerfile

ubuntu上のFirefoxOSビルド環境を作って壊してを繰り返すことが多くなってきたのでコンテナ型仮想環境に手を出しました。

dockerいいですね、docker。気に入りました。

Vagrant+VirtualBoxでは重くて使えなかったのですが、dockerならほとんどストレスなく使えます。

1. dockerのインストール

導入の仕方は公式に丁寧に書いてありますのでリンクだけ貼ります。

Ubuntu - Docker Documentation

企業の中の人など、プロキシ越しでないと外へアクセスできない事があります。そんなときは /etc/default/docker に

export http_proxy="http://*******"

こんな感じに環境変数を設定すれば docker pull ができるようになります。

2. イメージの作成

ubuntuに幾つかのパッケージを足したイメージを作成します。

Dockerfile のサンプルは下の方に貼っています。コピペしてubuntu上のどこかに置いてください。置いた場所を仮に /path/to/Dockerfile だとして下記のようにすればイメージが出来上がります。

$ sudo docker build -t my_img /path/to/

my_img の部分は任意の名前です。それなりに時間はかかりますがこれで my_img という名前のイメージが作られます。 Dockerfileの中身は下のほうで紹介します。

3. コンテナの作成

できたイメージを元にコンテナを作り、シェルを実行します。

$ sudo docker run -it --name my_cont my_img /bin/bash

my_contの部分は任意の名前です。ほぼ一瞬でコンテナが作られ、シェルが起動します。これで仮想環境上でのシェルが扱えます。

4. FirefoxOSのビルド

デスクトップクライアント版で試しました。ここで紹介する Dockerfile では develop というユーザを登録しているので、developで作業します。ここからは仮想環境内で作業します。

$ su develop
$ cd /home/develop/
$ git clone https://github.com/mozilla/gecko-dev

Building the B2G desktop client - Mozilla | MDN

MDNを参照しながら mozconfig を作り、

$ ./mach build

でビルドが通る状態となります。

5. Dockerfile

超簡単ですがこれで動きました。下記の内容を Dockerfile というファイル名で保存します。

FROM ubuntu:12.04

RUN useradd -d /home/develop -m -s /bin/bash develop
RUN echo develop:develop | chpasswd
RUN echo 'develop ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN apt-get update

RUN apt-get -y install autoconf2.13
RUN apt-get -y install bison
RUN apt-get -y install bzip2
RUN apt-get -y install ccache
RUN apt-get -y install curl
RUN apt-get -y install flex
RUN apt-get -y install gawk
RUN apt-get -y install gcc
RUN apt-get -y install g++
RUN apt-get -y install g++-multilib
RUN apt-get -y install git
RUN apt-get -y install ia32-libs
RUN apt-get -y install lib32ncurses5-dev
RUN apt-get -y install lib32z1-dev
RUN apt-get -y install libgl1-mesa-dev
RUN apt-get -y install libx11-dev
RUN apt-get -y install make
RUN apt-get -y install vim
RUN apt-get -y install unzip
RUN apt-get -y install zip
RUN apt-get -y install libgtk2.0-dev
RUN apt-get -y install libdbus-glib-1-dev
RUN apt-get -y install yasm
RUN apt-get -y install libasound2-dev
RUN apt-get -y install libgstreamer0.10-dev
RUN apt-get -y install libgstreamer-plugins-base0.10-dev
RUN apt-get -y install libxt-dev

プロキシ環境の場合は、Dockerfileの先頭あたり(apt-getよりも前の行)に環境変数の設定を入れれば良いです。

ENV http_proxy "http://*******"
ENV https_proxy "https://*******"

FirefoxOS開発用端末Flameの日本語ビルド

FirefoxOSの開発用端末Flameが2014.07に日本で発売されました。

出荷時はFirefoxOSのv1.3が入っていて、しかも非日本語版なので多くの人は自分なりの環境をビルドして焼くことでしょう。というかそういう使い方をするためのモノだと思います。

日本語ロケールを有効にした最新版ビルドの作り方はあちこちのサイトで紹介されつつありますが、やってみて失敗することも多いです。私はちょっとだけハマりました。

そこで私なりに作り方を整理しておこうと思います。

B2Gのビルド

最初にやることは、ごく標準的なB2Gのビルド環境の構築です。ざっと説明しますが分からなくなったらMDNを参考に勉強しましょう。

Firefox OS - Mozilla | MDN

事前準備として、MDN に書いてある通りビルドに必要な各種パッケージをインストールします。私はubuntu12.04を使っているので下記のようにしました。MDNには各環境別に必要なパッケージのインストール例が説明されているので自分の環境に合わせてセットアップしてください。

$ sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make libxml2-utils

あと、adb・fastboot が必要です。AndroidSDKを引っ張ってくるなどしてadbとfastbootを入手し、パスを通しておきましょう。

次にB2Gリポジトリを clone してきます。ここでは作業ディレクトリパスを /path/to/ と書いていますが環境に合わせて読み替えてください。

$ cd /path/to/
$ git clone git://github.com/mozilla-b2g/B2G.git

そのディレクトリへ移って config.sh を実行します。

$ cd B2G
$ ./config.sh flame

gaia や gecko など各種ソースがダウンロードされますので結構な時間が掛かります。気長に待ちましょう。 config.sh が終わったらビルドが出来る状態になっています。

エミュレータと違って実機をビルドするときは、ビルドの最初のフェーズで実機内に入っているファイルを adb pull で抜き出してくるようです。そのため Flame を USB でつないで adb が使える状態であることを確認しておきましょう。

$ adb devices
List of devices attached
f03641d1        device

adb devices でデバイスがアタッチされていることが見えればOKだと思います。ダメだった場合udevの設定をしましょう。FlameをUSBでつないだ状態で lsusb を使えば下のような出力が見えると思います。

$ lsusb
Bus 003 Device 003: ID 05c6:9025 Qualcomm, Inc.

ベンダIDが「05c6」ということなので、udev のルールに加えれば良いです。

$ sudo vi /etc/udev/rules.d/52-firefoxos.rules

下記の1行を書く

SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"

これでudevサービスを再起動するなり、マシンを再起動するなりすれば adb で Flameにアクセスできるようになります。

ちなみに上記のudevの設定は 52-firefoxos.rules なんてファイルを勝手に作りましたが、多くの人はすでに 51-android.rules みたいなファイルがあるでしょうので、その中に行追加するだけでもOKです。

この状態でビルドできるようになったはずです。B2Gを clone したパス上で build.sh を動かします。

$ cd /path/to/B2G
$ ./build.sh

ビルドに失敗したらMDNを見ながら環境を見直ししてください。

無事にビルドが出来たら Flame に焼きます。

$ ./flash.sh

これで最新版の FirefoxOS が焼けたことになります。

日本語版のビルド

さて標準的なビルドが出来たら、今度は日本語版にチャレンジします。 下記に書く事はMDNの Building multilocale の部分とほとんど同じで日本語向けにしただけです。

gaia

/gaia/locales/ の直下には日本語用のディレクトリがありません。別途ダウンロードします。

$ cd /path/to/B2G/gaia/locales/
$ hg clone http://hg.mozilla.org/gaia-l10n/ja

こうすれば ja というディレクトリが出来上がります。

次に取ってきた ja ディレクトリを読み込むように設定します。languages_dev.json をコピって、新しいファイルを作り、それを編集することにします。

$ cd /path/to/B2G/gaia/locales/
$ cp languages_dev.json languages_ja.json
$ vi languages_ja.json

中身は英語と日本語以外をざっくり削除する程度です。下のようにします。

{
  "en-US"     : "English (US)",
  "ja"        : "日本語"
}

これで gaia で日本語を有効にするセットが出来ました。これらのセットをビルドに組み込むため、B2G直下に .userconfig を書きます。

$ cd /path/to/B2G
$ vi .userconfig

中身は下のようにします。

export LOCALE_BASEDIR=$PWD/gaia/locales
export LOCALES_FILE=$PWD/gaia/locales/languages_ja.json
export GAIA_DEFAULT_LOCALE=ja

gecko

B2G直下に移動して gecko 用のファイルを取ってきます。

$ cd /path/to/B2G
$ hg clone http://hg.mozilla.org/l10n-central/ja gecko-l10n/ja
$ hg clone http://hg.mozilla.org/build/compare-locales

設定のため再び .userconfig を編集します。今度は下の行を追加します。

export L10NBASEDIR=$PWD/gecko-l10n
export MOZ_CHROME_MULTILOCALE="ja"
export PATH="$PATH:$PWD/compare-locales/scripts"
export PYTHONPATH="$PWD/compare-locales/lib"

ここまでで日本語化ビルド用の設定は完成です。

日本語キーボード

表示が出来ても入力が出来なければいまいちなので日本語入力ができるようにします。

追記:ツリーの中に日本語辞書が取り込まれたようで、下記の打ち消し線部分は対応不要になりました。

まず作業ディレクトリに ipadic というディレクトリを作ります。

$ cd /path/to/B2G/gaia/apps/keyboard/js/imes/jskanji/dict
$ mkdir ipadic

この ipadic ディレクトリは時々名前が変わるみたいです。しばらく前は src という名前だった気がしますが今は ipadic のようです。 jskanjiの直下にあるREADMEを読みましょう。

次に任意のディレクトリに ipadic-2.7.0.tar.gz を展開します。 ipadic-2.7.0.tar.gzはここから取ってきます。

/24435/ipadic-2.7.0.tar.gzをダウンロード - IPAdic legacy - SourceForge.JP

取ってきた tar.gz を展開して中に入っている *.dic を全部、先ほど作ったディレクトリの中へコピーします。

$ tar xvzf ipadic-2.7.0.tar.gz
$ cd ipadic-2.7.0
$ cp *.dic /path/to/B2G/gaia/apps/keyboard/js/imes/jskanji/dict/ipadic/

この状態で dict ディレクトリ上にて make します。 しばらく掛かりますが dict、dict.utf8 というファイルが同フォルダ上に出来上がるはずです。

$ cd /path/to/B2G/gaia/apps/keyboard/js/imes/jskanji/dict
$ make

最後にこの日本語辞書を使うためのキーボード設定です。 再び.userconfig に設定を書きます。

export GAIA_KEYBOARD_LAYOUTS=en,jp-kanji

ビルド

いちど objdir-gecko、out を消してから再ビルドします。そうしないと L10NBASEDIR が設定されてないとのエラーになりました。

$ cd /path/to/B2G
$ rm -rf objdir-gecko
$ rm -rf out
$ ./build.sh

これで再ビルドが終わったら Flame に焼いて完了です。

$ ./flash.sh

日本語キーボードを有効にするには設定アプリからキーボードを選択してください。 あんまり優秀なキーボードではありません。。 Google日本語入力とか使いたい・・。