2014-02-27

Gnome 3.10 / GTK3.10 でのHiDPI

糞すぎ。スケールが整数単位だなんて、OSXの影響受けすぎでしょ、そんなにOSXマネするんだったらそれ使えばいいじゃん。

ってのは冗談で、GTK 3.10 で HiDPI とも呼ばれる DPIスケーリングがサポートされたのでその話。

去年の頭に 12インチのフルHD液晶のラップトップを買った関係で、DPIスケーリングをオンにして通常Windowsを使ってる。でFirefoxもHiDPIをサポートしているので、HiDPIをサポートしてないアプリは基本的に使いたくなくなった。

現在Windows上であってもHiDPIをまともにサポートしているブラウザはInternet ExplorerとFirefoxだけで、Chromeはいまだにサポートしてくれず (Issueはあるよ!)、Operaに至っては、OS標準のDPI Scalingをオフにしている関係で、かなり残念なことになってる。HiDPIで使ってるのに文字サイズが細かくなりすぎる。

OSX版だとみんなサポートしてくれてるんだけどね。

このDPIスケーリングはGTK3.10でやっとサポートされたため、Linuxのデスクトップでもやっと使うことができるんだが (でもスケールサイズは整数のみという残念仕様。cairo使ってるのに)、今日時点でどのブラウザもサポートできてない。GNOME標準のブラウザであってもだ!。


こんな感じでGTK3側で勝手に低解像度でスケールする仕組みになってるんだけど、せっかくcairo surfaceにそのまま描画しただけでは全然ダメだということがわかる。ChromeとFirefoxはGTK2アプリ (ChromeはAuraに移行予定らしい) なんだけど、組み込みコントロールによってスケールするしないがあって、非常に残念な結果になってる。GTK2だとすべてエミュレーションでいいのに中途半端なことし過ぎ。GTK3だとデフォで全部エミュレーション。

しかも、デフォルトで低解像度自動スケールなので、こっちがスケールしたくなくても勝手にスケールする羽目になる。調べるとcairo側にscaleするAPIを作ってそれを呼んでるらしいと。cairoへ描画してるのにピクセル単位での描画じゃなくて、スケール単位での描画なので残念な描画結果になる。GTK3の描画シグナルでスケールを無理やりオフにすると確かにスケールせずに描画できるけど、ウィンドウの高さと幅がスケール前の長さを返すので、変更が非常に面倒。Firefoxみたく内部でいろいろ計算しているアプリの場合は逆に自動スケールなんて機能が邪魔すぎる。

ということで、自動スケールをオフにするには、gdk_x11_display_set_window_scale()を呼び出してスケールを1にすればいいらしい。またGnome側が持ってるフォントサイズはスケールを考慮したサイズなので、gdk_screen_get_setting()で現在のスケール値を取得して、それを基してピクセルサイズを計算すればいいってことらしい。

昨日の夜中に突貫工事したヤツ。Work In Progress。


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にまとめてあるから、興味がある人は見るといいかもね。