ラベル Mozilla の投稿を表示しています。 すべての投稿を表示
ラベル Mozilla の投稿を表示しています。 すべての投稿を表示

2024-08-01

Android 14 (Credential Manager) におけるパスキー対応が面倒すぎる

DroidKaigiにココらへんの話をしようと思って、CfP書いたけど落ちたので、自分用の覚書。

Firefox (GeckoView) AndroidでCredentail Managerの対応を入れたのが、GeckoViewとしてはバイナリサイズを大きくしたくないため、JetPackを一切使わずにCredential Manager経由でWebAuthn対応を行うコードをJavaでスクラッチで書いた。おそらくJavaでスクラッチで書いたのはChromeとGeckoViewだけだし、おそらくこの2つの製品以外でスクラッチ実装がされることは今後もないと思う。

しかもGeckoViewはWebブラウザエンジンなわけだから、いろんなWebサイトで実行可能な必要がある (= オリジンを正確に設定する必要がある)。この値を設定するのもおそらくBlinkとGeckoの2つの製品以外でほぼ存在しないであろう。なので、実装にあたって、実装者、すなわち自分しか被害者がいない事例がいろいろあることになるわけだ。自分はGoogleの人じゃないので、社内情報アクセスできないからね。

従来の実装方法

Google Mobile Service (GMS) にFIDO API (https://developers.google.com/android/reference/com/google/android/gms/fido/fido2/package-summary)が提供されていた。これを使うことでWebAuthnの実装が簡単にできるようになっている。またとあるバージョン以降であればパスキーをGoogle Password Managerに登録することが可能。これは古いAndroidでも動作する。

Credential Managerとは

Andorid 14から Credential Managerという仕組みが追加された。このCredential Managerはサービスとして実装されるもので、サードパーティに対して認証要求を移譲できる。ただこのサービスには3つのメソッドしか存在しなくて、登録・認証・削除があるだけだ。幅広い認証情報を扱えるようにAndroidチームの人は考えためであろうけど、この3つのメソッドには引数がBundleしか実質存在しない。すなわちアプリケーションはBundleに各々好き勝手に情報を入れると、OSにインストールされたCredential Managerサービスたちが、登録成功とか返すようになっている。なおBundleに何入れるべきか?なんてものも存在しない

Credential Managerを使ったパスキー実装

パスキーを実装するには、このBundleになにかを入れる必要があるのだが、そんな情報はdeveloper.android.comには一切存在しない。GeckoViewでは一通りのBundle定義をしているが、これらはJetPackのコードとChromeのコードから持ってきている。オープンソースだったからいいようなものだが、これらの謎定義はGoogle社内でしか共有されていないような感じなので、まぁなんというかEU頑張れって感じ。ここには入れていないが、Google Password Managerだけ無視するっぽく見える定義もあったりする

実際問題、JetPackを使った場合はここらのBundle問題はJetPack側で吸収されるので、そこらは問題になりえないのだが、問題はリクエスト用のJSONは自分たちで組み立てないといけないってことだ。 なので、WebAuthnの仕様をちゃんと理解しないといけない。それをアプリケーション開発者に求めるのはどうかと思う。なおレスポンスもJSONむき出しで渡される。検証とかしたい場合は、むき出しで渡されたJSONデータを展開して検証しないといけない。

以前のGMSのFIDO APIではJSONむき出しな仕組みにはなっていない。引数はBuilderが用意されているので、必要なパラメータを設定するだけで行える。ちなみにGeckoViewでいうと、これがCredential Manager版でここがFIDO API版なのだが、Credential Manager版は自分でJSONを組み立てるのに対して、FIDO API版はBuilderで引数を組み立てる。

あと、検証時 (Assertion) には落とし穴が実は存在してて、クライアントサイドで検証する際には、レスポンスのJSONの ClientDataJsonハッシュを使って検証を行うわけだけど、レスポンス内のこの値は正しくない可能性があって、リクエスト時にBundleに入れたClientDataJsonのハッシュが正しい値だったりする (これは2日悩んだ)

現在のCredential Managerがどの認証方法を対応しているか?

そんな方法はない。

とりあえず試してみて、サービスがTYPE_NO_CREATE_OPTIONSを返してくれれば、たぶん対応していないということがわかる。なお、1Passwordは最初のリクエストでサービス自体がクラッシュしたりするので正しく動かなかったりする。GeckoViewだと登録時はResident KeyがRequiredのときだけCrednetial Managerを使うようにしているが、Preferredの場合にどうするかは決めかねている。

また、認証を行おうとしてるクレデンシャルがGoogle Password Managerで認証可能かどうか?みたいなのはFIDO API経由で確認は可能なので、認証可能であればGMSのFIDO2 APIを使って、認証できない場合は Credential Managerを使ういうこともできる。GeckoViewもChromeもそのようなコードを入れている。

結論

GMSのFIDO APIがCredential Manager対応すれば、みんなハッピーだったのでは?やっとサードパーティ製品で対応が増えてきたところだしさ

2020-04-06

Twitterの仕様の認識間違いに対してのMozillaの反論

TwitterがMozilla Firefoxに保存されているTwitterデータのキャッシュについてというブログを書いてきたことに対して、Mozillaから反論のブログが書かれているのだが、内容としてはよくありがちなWeb開発者のミスではある。Mozillaのblog.mozilla.orgの方はEric Rescorla (ekr) が書いてて、Mozilla Hacks Blogの方はMatrin Thomson (mt) が書いているのだが、彼らが誰かを知ってると、この指摘はなおさらタメになる話である。

そもそもekrは今Firefox CTOという役職ではあるが、RFCのTLS 1.1 / 1.2 / 1.3のAuthor。

またmtはRFCのHTTP/2のAuthor。

仕様を作ってる張本人たちから指摘されるという面白い展開ではあった。

2018-07-22

Web Replay

Mozillaとして今年はWeb or アドオン開発者へ向けての機能を充実させようというのがテーマにあるんだけど、Brian Hackett (元々SpiderMonkeyの型推測とかやってた人) がWeb Replayというものを作ってる。まだ本体には入っていないのだけど、これはRecording & Replayデバッガと呼ばれてるもの。

デバッグをしていと誰もが経験すると思うのだけど、ブレークポイントを仕掛けて止まった時に、調べようと思ってた現象 (バグ) がすでに起きてしまってて、「あー、このポイントでは遅かったか。。。」ということは何度も経験あると思う。そうするともう一度デバッグのやり直しになると思う。Recording & Replayデバッガがあると、その際にその現象が起きるところまで巻き戻すことができる。そのためデバッグの効率が非常に高くなる。

またその一連の動作を保存できれば、現象を何度も起こす必要なくそれを再生すればいいだけなので、QAが見つけてきたものを開発者がより効率的に調査できる。

そのような機能をFirefoxに搭載しようとしていて、これがWeb Replayと呼ばれているもの。

ちょうど今月のJSConf EUでJason Lasterがそのプレゼンやっててビデオがここにある。10分くらいからそのデモがある。


こういう機能がブラウザに入ればよりデバッグが楽になるよね!Firefox 63 or 64くらいかなと。

追記

Replyじゃなくて、Replayですね。emkさんありがとうございます。

2016-01-08

How to add API status to Firefox Platform Status

ChromeやEdge、WebKit (決してSafariではない) に続き、Firefoxもステータスページを作った。

MDNにも対応情報はあるがこれの情報はMDNと同期してるわけではない。また、例えばChrome Statusとかcaniuseには載っているけど、FirefoxのStatusにおなじ情報がないってのもある。

ただ当然のことならが、githubにこのコンテンツ用のレポジトリが存在してて、issueを立てたりPull Requestを送ることで、ここに項目を追加したり情報を修正することは可能になってる。実際features配下へマークダウンファイルを追加することで項目を追加できる (実際、実装やってたAPIのIssue投げたらPull Request投げろって言われて投げた)。詳細はCONTRIBUTING.mdに書いてある。

なお、Chrome Statusは、https://omahaproxy.appspot.com/からJSONとかでも取得できる。

何か情報が間違ってれば、WebKit以外は以下のgithubでissueとかを投げられるし、WebKitもhttps://bugs.webkit.org/に投げれば拾ってくれるはず。

2015-11-16

Web Assembly

Firefox Developer Conference 2015 in Tokyoがあったのだけど、そこでemscriptenとWeb Assemblyの話してきた。



Web Assemblyは個人的に今一番ホットな話なんだけど、このイベントの矢倉さんのセッションでもViewSource ConferenceでLukeが話した内容を元に2ページほど触れられている。

あと、先週のBlinkOnでもセッションあったので、これもみるべし。

今のところ、s-expreesionベースのフォーマットでみんな実装実験やってるし、clang/LLVMも:sunfishがバックエンド実装やってる。LLVMについてはasm.jsからのwasmトランスレーターで間に合うからステーブル化の最初のMUSTなことではないけど。ちなみにJavaScripteCore/WebKitはすでに実装テストしてて、CPP->JSにしたものとCPP->JS->WASMにしたもので比較すると2倍の速度で動くっていう結果が出てる。

セッション終わったあと、Jxckさんと話しをしててWeb APIを直接触りたいよねって話をしてたんだけど、なんかAPIは作る話にはなってるっぽい(けど、これは最初のゴールには含まれない)。

基本ゲーム (canvasとWebGLは使いたいよね) が最初のターゲットかなと。

2015-11-04

Gecko cross build using docker

Firefox 4のリリースがされたらへんから10くらいにかけてコツコツとLinuxのクロスビルド環境の整備をしてた。その結果クロスビルド環境においては、DebianのMultiarch/HOWTOで書かれているやり方で環境構築できるようにしている。

FirefoxというかGeckoを組み込みで使いたいなんて話が仕事柄たまに来るんだけど、環境の作り方を説明するのが面倒すぎるし、自分で検証用にVMWareのクロス環境を持つのもバカバカしい (OSのアップグレードのたびにテストしてた) のでDockerを使ったコンテナに移行した。

https://hub.docker.com/r/wontfix/gecko-armhf-dev/ (armhf用)

dockerで以下のようにイメージを実行すれば、必要なライブラリは入っているので、mercurialでcloneするなりtarballを持ってきて、.mozconfigを書けばarmhfのビルドができる。
docker pull wontfix/gecko-armhf-dev
docker run -it wontfix/gecko-armhf-dev

Dockerfileを見ればわかるけど、クロス用のライブラリをインストールするとき (特にlibgtk2.0-dev)、--no-install-recommendsをつけないとライブラリがコンフリクトしてしまうものあるので、注意が必要みたい。(というかlibgtk2.0-devのパッケージングの際、RecommendにPythonが入ってるんだけど、それはおそらくPython:anyにすべきなんじゃないかなと)

2015-08-14

WebCompat

MozillaはFirefoxやFirefox OSの開発以外にもいろんなことをしてが、Mozilla社内にはWebCompat Teamってのがある。

何をしているかを説明すると、Firefoxや他のブラウザで表示されないページを解析して、なぜ表示されないのかを調べ、それを製品やWebの標準に活かすことをやってる。場合によってはコンテンツ制作元・会社へ問い合わせをして、具体的な修正方法を提示するってこともする。

今年になって彼らはアジア圏のモバイルWebサイトを集中的にみてる。具体的には中国と日本。日本も見てるけど、日本語がわからない人が見てるんじゃないのって思う人はいるかもしれないけど、チームメンバーの一人は日本に住んでいるので日本の事情もよく知ってる

日本のサイトにおいて彼らはTOP100+のモバイルサイトをすべてチェックして、大体の傾向があるそうだ。

  • CSS flexboxはwebkitプレフィックスを使った古い形式のものが未だに使われている (= Web標準を利用していない)
  • CSS xxx (いろいろ) はwebkitプレフィックスを使った古い形式のまま未だに使われている (= Web標準を利用していない)
  • ユーザーエージェント文字列にWebKit的なのがないとモバイルと見なさない。またAndroidという文字だけでもモバイルとみなしてない。でもAndroid 4.0のようにバージョン番号を含めるとそれが改善するサイトが結構存在するらしい
  • 使われているライブラリがWebKitでしか動かない (CSS TransformがWebKitプレフィックスがないと動作しない。JavaScriptから触る場合も含めて)

Mozillaの解析結果で言えば、Microsoft Edgeのユーザーエージェントの件は、現状のモバイルWebでどうしたら適格に表示できるようにするかということを考えればいたしかたないことだと思う。これをバカにする人たちは現状のモバイルWebを理解していないか、SafariとChromeだけで動けばいいサイトを作るひとのどちらかだ。そういう人たちに限って、Internet Explorer 6でしか動かないサイトを作ってた人たちなんじゃないかな

でもMozillaのやりかたで言えば、Microsoft Edgeのやり方よりももっとすべきことがあると思う

Mozillaで言えば、こういうことをまず最初にやる

  1. 表示できないサイトを調査 (それ用に検出ツールもある)
  2. 原因を特定し、サイトのオーナー (要はその会社) にコンタクト
  3. コンタクト可能であれば、修正方法も含めて提供・アドバイス

MozillaはモバイルWebにおいて強力なシェアを持った会社ではないので、僕らの言うことなんて聞いてくれない・無視する会社も存在する。もちろんコンタクトをとったところ、ちゃんと直してくれるところもあるけどね!。どうしても直してくれない場合にはいくつかメカニズムを用意してる

UserAgentの書き換え

ユーザーエージェントを強制的に別の文字列にすることでモバイルページとして認識させる。https://dxr.mozilla.org/mozilla-central/source/mobile/android/app/ua-update.json.inにリストがある

CSS unprefixing service

webkitプレフィックスとかを強制的に外す。https://dxr.mozilla.org/mozilla-central/source/caps/nsPrincipal.cpp#501ここらへんがそのホワイトリスト。

ということもやって、モバイルWebページに対しても表示改善を行っている。ここ数か月でFirefox for Androidを使った時にページ表示が改善しているはず。

こんなことをブラウザベンダがやらなくてもWeb開発者が標準に即したページを作ってくれればいいんだけど、残念ながらそういうことにはなっていない。プレフィックスというデザインがよくなかったという話は数年前にしていたけど、いまだにこれが現状だ。

またWeb Compatibilityって考えかたはシェアが大きい会社であればあるほど言わない。それは昔のMicrosoftを見てればそうだし、今のシェアの高い会社を見れば、そんな感じ。MozillaもMozilla.orgになってからはここを重要視しているし、各ブラウザの互換性向上には各ベンダーが投資してほしいなと個人では思ってる

最後に、報告先として彼らはサイトを持っているので、https://webcompat.com/ に報告してもらえると助かる。ここはFirefox以外にEdgeの件も報告してもらって構わない。Web全体のComaptibility向上が目的なので。

あ、これらの話はもう少しデータ付きで会社のブログに書くべきだなと今思った

2015-01-25

Firefox Nightlyで位置情報プロバイダがGoogleからMozillaに変更になった

ブラウザ内で位置情報を取得する際、FirefoxではGeoIPとWiFi情報から位置情報を決定している。従来のFirefoxではGoogleの位置情報APIを利用していたのだが、先週末のFirefox NightlyからGoogleの位置情報APIではなくて、Mozilla自身の位置情報APIを使うように変わった。

Mozillaの位置情報サービスはMozilla Location Servicesという名前で開発を行っていて、GoogleのAPI互換かつ、サーバーなどのソース、収集されたデータさえも公開されている。(細かい話は以前書いたエントリを参照のこと。)

ここで参照されるデータというのは、以下のアプリで収集されたものがベースになっている。
  • Mozilla Stumbler
  • Firefox for Android (Mozilla 位置情報サービスへのデータ送信を有効にしている場合)
Firefox for Androidで位置情報データがMozillaへ送信する場合は限定的な条件がついている。それはGeo Location APIを利用した際にGPSベースで位置を取得した場合のみだけになっている。そのため、まとまった量の位置情報のデータを送るためにはMozilla Stumblerを使うのが現状ではベスト。

これらのデータに関しては一年前からコツコツデータ収集をしてきたので、東京の都心に関してはデータの密度は高くはなっている。

ただ、これだと場所によってはデータの品質に問題があるので、Windows版とOSX版のみ別のプロバイダを使うオプションが存在してる。

Microsoft Location API
Windows版上でabout:configでgeo.provider.ms-windows-locationをtrueにすると、代わりにMicrosoftの位置情報サービスを使うようになる (Windows 7以降)。すなわち位置情報についてはInternet Explorerと同様の品質になる。

Core Location API
OSX版上でabout:configでgeo.provider.use_corelocationをtrueにすると、代わりにAppleの位置情報サービスを使うようになる。(OSX 10.8以降だったはず)。すなわち位置情報についてはSafariと同様の品質になる。

Firefoxの正式版のころにはいろいろ変わっていると思うけど、今の開発版ではこんな感じになってる。

2014-02-10

Mozilla Location Service

現在、Firefox (デスクトップ版、モバイル版含めて) ではGoogleのLocation APIを利用して位置情報を取得しているんだけど、今テストでMozilla謹製のLocation Serviceをテストしてる。それがMozilla Location Serviceなんだけど、これの収集データの話について。

Firefox for AndroidのAuroraとNightlyのユーザーだと設定画面に以下のような「Mozilla位置情報サービス」ってものがある。


これだとどういうタイミングでデータ収集をしているかわからないのだけど、このサービス作ってるDougTが以下のように説明してる。



要は、「Mozilla位置情報サービス」を有効にすると、GeoLocation APIを利用したときにGPSとWiFiとCellの情報をMozillaのサーバーに送るよということ。なのでこれのプライバシーポリシーに同意しない場合は、有効にしないでほしい。

またこのデータ自体はMozilla Ichnaeaと呼ばれるAPIが提供されていて、実際GoogleのAPIとある程度互換性がある。様々な利用とかでGoogle APIを使いたくないのであれば、MozillaのAPIを使うことも可能だ。コードも公開されているのでライセンスを満たせばオレオレGeolocation Service Providerを立ち上げることもできる。データのSubmission APIのフォーマットも書いてあるのでどういうデータが送られるかということもそこのサイトを見ればわかる。

って感じだけど、ここからが本題。

Android版のAuroraとかNightlyを使っててGeoLocationを有効にするサービスなんて使っている人なんて、日本でおそらくすごく少ないので、現在のデータってのはデータ収集を匿名にしても匿名性は乏しくなる。

現在の日本の状況ってのはこんな感じ。もっとズームできるけど、、、えっといろんなものが特定できる気がするのであえてしません。(Webサイトから確認できるんで見たい人はそこを見ること)


東京大阪間の新幹線だけ充実してるというこの状況。なおヨーロッパとかサンフランシスコ近郊はデータが充実してるけどね!

データ収集にはこのFirefox for Android以外にMozStumblerというAndroidアプリがあって、これで詳細にマッピングが可能になってる。なのでこのLocation Serviceのデータがピンポイントに自宅を指している私みたいな人は家周辺および駅周辺をくまなくマッピングしてわからなくする必要がある気がする。削除したいのであればDougTに聞けばいいかと思うよ。

あと当然のことながらプライシー案件でもあるのでオプトアウト方法も存在する。詳しくはhttps://github.com/mozilla/MozStumbler/blob/master/src/org/mozilla/mozstumbler/SSIDBlockList.javaを見てくれればいいけど、Googleが推奨している_nomapを設定するのが一番いいかと思う。

なのでこの情報を送る場合はこういうことになるので理解して有効にするなり有効にしないなりしてほしい。

またGoogle、Apple以外の類似のサービスについてもhttps://wiki.mozilla.org/CloudServices/Location/Bootstrapにまとめてあるから、興味がある人は見るといいかもね。

2013-12-18

オープンソースな製品でどうセキュリティバグをハンドルするか?

自分がFirefox 26で直した話でSecurity Bugとしてマークされているのがあったんだけど、それの話。バグ自体は、CVE番号は振られているけどただのクラッシュなのでSecurity Advisoriesには載ってないものね。

今までもたまにSecurity bug自体は直してたり (面倒であればバグを登録。最近もした) するんだけど、ほとんどの場合はリリース版になっていないベータとかTrunkのものでの話のバグを直すことばかりなので現在のプロセスに疎いことがあるんだけど (今の日本のオフィスで働いている人達に、いまってこういうプロセスになってたって知ってた?って聞いたら、「えっ?」って言わたのは内緒)、こんな感じで対応する。

  • commit時のログには詳細を書かない。すっとぼけて大体こういうハンドリングに変えたとか。バグ番号だけのcommitの場合もあり
  • テストケースでバレバレになってしまうものはリリース (Security Advisory) が出されてからテストケースをcommitする。それ以外の場合もあるけど、基本後でcommit。
  • 考えられるシナリオをテンプレートに書く。Buffer Overrunとか。その内容次第で緊急リリースとかCVE番号含めて公開とか決定される。

というのもAndroidとかと違ってFirefoxは常に最新のソースツリーが公開されているのでコミットログのウォッチャーがセキュリティバグ修正の変更を見ることで簡単にセキュリティバグを見つけることができてしまう。そうなると悪意がある人達がZero-Dayなセキュリティインシデントものを作ることが可能になるので、それを対策するためにこういう風になってる。

またバグエントリもSecurity Permissionになるのでその権限を持ってる人しか見ることはできない。ただバグ番号はシーケンシャルに振られるので登録された日時の大体は予想が付くから、それとコミットログから、バグ報告から直すまでの時間のおおよそはわかるよね。

これがプロプライエタリ製品であればベンダがここのバージョンで直したとしか書かれないので、いつ報告を受けていつ直したかは、ベンダが公開するかどうかにかかってるから、直すまでにかかった時間はわからないよね。

Mozillaではこんな感じでオペレーションしてる。細かい話は、ここらのドキュメントを見るといいよ。

2013-12-09

ARM Technical Symposium 2013 Japanで話してきた

ARM Technical Symposium 2013 Japanで話してきた。久々に外で話すとペースがつかめないね。


ARMのイベント参加者特別サイトにも掲載されてると思うけど、あのサイトだと2か月くらいで消されちゃうんだよね。

2013-10-31

Open H.264

スタンスとしては昔から変わってないのだけど、Mozillaは理想を目指す部分と現実的な部分の折り合いってのも必要だ。Codecに対してのスタンスは以下の二つのブログを読めばわかると思う。
なんで自分ところにH.264のデコーダー入れないかは、上記の引用をすると、
Mozilla has decided differently, in part because there is no apparent means for us to license H.264 under terms that would cover other users of our technology, such as Linux distributors, or people in affiliated projects like Wikimedia or the Participatory Culture Foundation. Even if we were to pay the $5,000,000 annual licensing cost for H.264, and we were to not care about the spectre of license fees for internet distribution of encoded content, or about content and tool creators, downstream projects would be no better off.
払うのはいいんだけど、えーと、ソースコードをビルドした人たちも払うのはどうかと思うよってことがポイントで、WebMで幸せになるかと思いきや、

につきると思う。

まぁ落としどころとしては、agal様が作ったMPAPIくらいしかないとは思ってたけどさ。

世の中は理想だけで生きられないってのは当然だけど難しいね。

2013-09-11

Rust言語でWebAppの開発に必要なN個のこと

via http://d.hatena.ne.jp/gfx/20130909/1378741015

あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずRustについて知っていることを書いた。

ただし、現時点でRustを使うのは正しい選択ではない。バージョン1がリリースされてからという前提であるべきかと思う。

ということで足りない情報は教えてください。


パッケージマネージャー

rustpkgがあるのでそれを使おう。

Rustpkg Reference Manual


アプリケーションサーバー

HTTPサーバーの実装としては、https://github.com/mozilla-servo/rust-httpにある。Apache上で使いたい? CGIとして書けばいいんじゃない?


リクエストパラメーターの処理

がんばって自分で...


ルーティング

WAF内蔵のを使えばいいんじゃない?そもそもWAF自体がな...


データベース

C言語バインディングを書けばでき...

Rust Foreign Function Interface Tutorial

SQLiteであれば、バインディングが存在するよ


ビューのレンダリング

HTMLをがんばって生成しよう


HTTP クライアント

https://github.com/mozilla-servo/rust-http-client.git

なおServo用に誰かリライトしてくれる人を募集している。


テストフレームワーク

Rust自体はunit test機構を持っている。

Unit testing in Rust


WAF

WREってのがあったけど今のRustじゃ動かない。

https://github.com/erickt/mre


そもそもVersion 1.0にもたどり着いていない言語に多くを求めるのは酷です。

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イジればいろいろできます。

2013-04-26

追悼 E4X (仮) やります

E4Xって言っても誰もわからないかもしれないけど、ECMAScript for XMLというのが世の中に存在してて、ActionScriptとかSpiderMonkeyとかRhinoとかで実装されてました。ですがFirefox 21で見事SpiderMonkeyから削除されちゃいますので、ブラウザ上で使えるものは残念ながらもうなくなってしまいます (Fireofx 17 ESRではまだ使えるけどね)。

昔Google Waveを偲ぶ会というのがあったんだけど、


E4Xでもやりたいとsaneyukiさんが言ってたので、5月19日に六本木でやることになりました。詳しくはATNDで。なお話す人はまだ募集してるので、5分でもE4Xへの愛を語りたい人は私 (@makoto_kato)まで。

なおFirefoxのE4X実装のSecurity Bugをレポートしたはせがわさんは欠席となりましたので、ご報告しておきます。来年IE6葬式をやるんだったら、一緒にやりましょう (その時はhebikuzureさんに相談するとは思いますし、誰かやりたい人相談しましょう)。

2013-03-30

Firefox SPDY + WSの話をしてきた

資料はこれ。http://makotokato.github.com/slide_spdy_ws_gecko/。

最近Networkのモジュールオーナーになったパトリックがほとんどの実装をしてるので、彼の仕事次第でSPDYの実装は進むんだよね。ちなみに彼は仕様へもコメントしてるけどね。(CSSもそうだけどコード書いてる張本人が仕様を書いてたり、仕様へのフィードバックを直接してるのがMozillaだから。最近はfantasiやTantekやAnneみたいに仕様ばかりやってる人もいるけどね)

2013-03-28

asm.jsの呼び方

という話になって、中野さんが聞いたところ、

14:42 (masayuki) Hello, I have a question. How do you pronounce "asm.js"?
14:48 (heycam) masayuki, I would say "ay ess em dot jay ess"
14:49 *nick heycam → heycam|away
14:49 (masayuki) heycam: Oh, really?
14:56 (glob) masayuki, i pronounce it the same as heycam
14:57 (masayuki) glob: thanks, I was looking for the official pronunciation, but I've never found it yet.

と言っている。へー。

2013-03-13

New Tokyo Office

Mozilla Japanのオフィスが移転した。

新しいオフィスはオフィスをハックするノリで作ってるため結構工事スケジュールがタイトすぎて、デザイン等をお願いしているNOSIGNERさんからこんなツイートが出てた。


このツイートがちなみに入居予定の一週間前。

なお入居前の金曜日の夜がこんな感じ。


ベータ版状態のオフィスに入居してちゃんとハックして使えるようにするって感じ。この画像だけだとベータにもなってないけどね。

ここのオフィスはMozillianのWorking Spaceとして使える場所にもする予定。なのでフレキシブルにレイアウトを変更できるような造りになってる。

なお、旧オフィスが麹町にあったのだけど、その麹町のオフィスの上の階に去年までいたRoot Communicationsさんがまた同じ建物内にいるとか。自分たち、ストーカーかよ。