2013-05-28

電波法を回避してGeeksPhone PEAKをネットワークにつなげる

GeeksPhone PEAKやKEONは技適マークを持ってるわけではないので、WiFiで使ったりBluetoothで使ったり、ドコモとかMVNOとかのSIMを差して使うことは日本の法律的にはダメだ。

海外製端末上でネットワークが動いているデモを日本国内で公に見せることができなくなるので、回避するには以下の方法が考えられる。
  • 海外のSIMを差してローミングと言い張って、グレ-な感じで逃げる
  • 技適マークのとれた無線LANカードをMicroUSB経由で接続
  • 有線LANカードをMicroUSB経由で接続
  • MicroUSBと母艦PCを使って接続
よく週間アスキーが海外のSIMを差してるから大丈夫という話を書いてたりするけど、関係省庁に確認した話を聞くとどうもグレー(法律的な判例がないので何とも言えない)な感じだった。なので、公にはそんなに使えないっぽい話なんだよね。でも海外SIMを使ってる場合に違反になるのはローミングでつなげてるキャリア(ドコモとか)になるっぽいから、まためんどくさい話でもあるんだけど。

ということで、これ用にUSB LANカードを買って調査しても、お金がかかるので(カーネルコンフィグ見ればどれが動くくらいはわかるけどさ)、MicroUSBケーブルを使って母艦PCのネットワーク経由でインターネットに接続する方法をとることにした。

Firefox OSと言っても内部のレイヤーはAndroidを流用しているのでそこらのノウハウをある程度使える。

用意するもの

  • 母艦のLinux。Windowsでもいけると思うけど試してない。Linuxはなんでもいけるはず
  • MicroUSBケーブル
  • Android SDK。adbコマンドが必要なため。最近のUbuntuとかはadbコマンドを自分のレポジトリとかに持ってるからadbコマンドをすでにインストールしてる人はいらない

Firefox OS側のrndisを有効にする

rndisってのは、Androidガジェットドライバで実装されてるUSBネットワークインターフェイスのこと。Androidと同じようにsetpropコマンドでこれを有効にする
adb shell setprop sys.usb.config 'rndis,adb'
なお、リモートデバッグを有効にしないとadbコマンドは使えない。



ネットワークの設定

IPアドレスを10.1.2.3にするのであれば、以下のようにする
adb shell ifconfig rndis0 10.1.2.3 netmask 255.255.255.0
DNSの設定はsetpropで。面倒なのでGoogleのDNSサービスを設定する
adb shell setprop net.dns1 '8.8.8.8'
ルーティングテーブルの追加も。母艦のIPアドレスを10.1.2.1とすると、
adb shell route add default gw 10.1.2.1 dev rndis0

オフライン自動認識をオフにする

ここだけはFirefox OS固有の話。無線LANとか3GのコネクションがないとGecko内部でオフラインと認識してしまうので、この自動認識をオフにする。これをオフにすると、offlineイベントとか使えなくなるので要注意。

adbコマンドを使って、prefs.jsファイルを取得。<your profile>は各デバイス次第だけど、.defaultというSUFFIXがついているディレクトリのこと。
adb pull /data/b2g/mozilla/<your profile>/prefs.js
このファイルに以下の行を追加
prefs("network.gonk.manage-offline-status", false);
そして、それをアップロード
adb push prefs.js /data/b2g/mozilla/<your profile>/prefs.js
で再起動。

母艦側の設定

上記の設定を行うとAndroidガジェットドライバによって、母艦のLinux上ではusb0とかusb1とかデバイス名のネットワークデバイスが使えるようになる。なのでiptablesでNAT用のルールを書けば自ずと使えるんだけど、Ubuntuで/etc/network/interfaceに以下のような自動構成を書くのが自分の好み。
allow-hotplug usb0
iface usb0 inet static
  address 10.1.2.1
  netmask 255.255.255.0
  network 10.1.2.0
  broadcast 10.1.2.255
  up iptables -A POSTROUTING -t nat -J MASQUERADE -s 10.1.2.0/24
  up sysctl -w net.ipv4.ip_foward=1
  up route add -host 10.1.2.3
  down iptables -D POSTROUTING -t nat -J MASQUERADE -s 10.1.2.0/24
このような自動構成を書いておけば、ifup usb0で設定が有効になって、ifdown usb0で設定が破棄される。

ということで、MicroUSBケーブル経由でネットワークが使えるようになった。

2013-05-20

Software Design 総集編 【1990~2000】に寄稿しました

このプレゼンを過去に日本ウェブ協会さんでやってたということもあって、


Webブラウザの歴史的なことの寄稿を久々にした。内容はすごーーーく公平に書いてます。だってMozilla以外にも関わってたし。ブラウザでのSandBoxモデルなんてメジャーなブラウザではChromeが最初だと思ってる人いるみたいだけど、IE7のLow RightIEが最初だとかさ。



これ書いてる時に、Netscape 2.0とかをWindows 7で動かさそうと思ったら、ちょっと問題があるけど動いたところが感動した (テキストボックスが右から左のモードになってしまう)。Windows 95時代のバイナリが動くWindows 7の互換性にね。

なお、セットアッププログラムが16ビットなので32ビット版のWindowsにしかセットアップはできないけどね!

2013-05-12

GeeksPhone PEAKを買いました

初日のMySQLサーバーのmax_connectionsエラー祭りの中でFirefox OSを搭載した最初のモデル (というかDeveloper Preview) であるPEAKを買いました。



当然のことながら、cpuinfo

root@android:/ # cat /proc/cpuinfo            
Processor : ARMv7 Processor rev 1 (v7l)
processor : 0
BogoMIPS : 122.30

processor : 1
BogoMIPS : 122.30

Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc05
CPU revision : 1

Hardware : QCT MSM8625 SURF
Revision : 0000
Serial  : 0000000000000000

ということでローエンドからミッドエンドクラスのチップ使ってます。

ローカライズの場合は、GAIA部分だけを入れ替えればいいので、B2Gのフルビルドをする必要はなく、

cd <build root>
git clone git://github.com/mozilla-b2g/gaia.git
mkdir gaia-l10n
cd gaia-l10n
hg clone http://hg.mozilla.org/gaia-l10n/ja

って感じでgaiaのmasterとgaiaのローカライズファイルをローカルに持ってきて、

export LOCALES_FILE=<build root>/gaia/lcoales/languages_all.json
export LOCALE_BASEDIR=<build root>/gaia-l10n
export HIDPI=1

と指定して、

cd <build root>/gaia
make install-gaia make ADB=<your adb path>adb/

ってやれば上書きできる。バックアップがなくなっちゃうから、どっかでバックアップしておいた方がいいけどね。adbは、Android SDKのadbでも代用できる。

なお、ファクトリーイメージは、http://forum.geeksphone.com/index.php?topic=4723.0らへんにあるらしい(未確認)。



フォントはデフォルトだとDroid Sans Fallbackしか入ってないのだけど、/system/fontsにフォントファイルを入れればフォント自体は認識する。GONKやAndroidなGeckoの場合の日本語フォントの優先順位は、MotoyaLMaru, MotoyaLCedar, Droid Sans Japaneseなので、どちらかのフォントが入ってるとDroid Sans Fallbackの代わりに優先的に使う。

またフォントを自分好みに変えたいのであれば、/system/fontsにフォントファイルを入れたのち、/data/b2g/mozilla/<ランダムな文字列>.default/prefs.jsに以下のようなエントリを追加してください。

user_pref("font.name.sans-serif.ja", "<フォント名称>");

フォントの指定方法はまさにGeckoの流儀なので、prefsイジればいろいろできます。