2016-12-31

Quantum CSS (Stylo)

個人的な持論として、新しいプログラミング言語は自分自身の存在意義の証明をすべしっていうのがある。実際自分が雇用された会社が言語を作った例ってのがいくつもあるんだけど、大体の会社においてそれが行われている。実際ポシャったLonghornのコードなんかはシェルがC# (Avalon)+WinFSゴリゴリで書かれてて、デスクトップ用途におけるC#の存在意義を示すものだった。このプロジェクト自体は失敗したけど。失敗した理由は決して言語のせいだけじゃなかったけどね。完成時におけるハードウェアスペックの想定を間違えていた。

Rustって言語は、同じ時期に出てきたGoと同じ感じと勘違いする人は多いけど、Rust自体は言語仕様としてコーディング時に起きやすいミスを言語仕様的に許さないっていうことがあって、C言語みたいなとりあえずコンパイルは通すみたいなのを許してくれないことが多い。そのため、動いてしまえば問題が起きづらいって感じで、さすが2010年代に出てきた言語だなという感触がある。でもRustって言語の証明をしないといけないとは思うけど、それは?ってところでServoというエンジンがある。

Servoのデモっていくつか残念な話があって、Servoで最速な部分の話を全面に出してて、実際のところよく最適化された現在のいろんなWeb Engineにくらべて速いってことはそんなに多くはない。ただ、局所においてはそうとう速いところはある。

現在のGeckoのCSSパーサーやStyle Systemの設計は相当古い。WebKitやBlink、Edgeに比べれば速いわけでもない。そこでStylo (Quantum CSS)で置き換えて行くってことになる。Stylo自体は去年のMozilla All HandsでRustをどう使うかとかServoどうするのよ的な話から派生した流れで2015年の年末からBobby Hollyがやり始めたもので6月の時点のデモではWikipediaのCSS Parse / Stylingが約5倍くらいになるよって感じでステータスが報告された。Stylo自体は別ツリーでビルドされているので、まぁちょっとずつだけど進んではいる。実際のところは3/4くらいのCSSプロパティの実装は行えてるので、このままだと2017年の春から夏にはNightlyで有効にされるんじゃないかな?

なおBlinkはCSSパーサーをアップデートしたらしいんだけど、そのパーサーをAppleもポーティングしてWebKitに組み込んだらしいんで、2017年は各社のCSSパーサーがいろいろとアップデートされる年なんだろうね。

2016年に買ったもの

PINE64

https://www.kickstarter.com/projects/pine64/pine-a64-first-15-64-bit-single-board-super-comput

Cortex-A53採用のボード。値段が安いしDebianがサポートされてるので非常に使い勝手がいい。Firefoxのaarch64対応はこれを対象に動かしてる。

SONY XPEDIA Z5 Compact

http://www.sonymobile.co.jp/xperia/docomo/so-02h/

Snapdragon 820を採用した世代が発売になるまで買い換えるのを止めようかと思ったけれど、前使ってたZ3 Compactが壊れたので購入。発熱量が多くて段々遅くなったりGPSを拾わなくなる話が多くて、ポケモンGOをやるとGPSを拾わなくなるというのが残念。

ホント、Cortex-A57採用のSoCはいろいろと問題あるねって感じ。

でもサイズ感は気に入ってるので、このサイズのシリーズは続けて欲しいと願ってる。

iRobot Braava 380

https://www.irobot-jp.com/braava/300series/

始め発売された時は全く興味なかったのだけれど、クイックルワイパーを使うと便利すぎるという話を聞いて購入。ルンバは便利なんだけど、ちょっとたまにゴミがとれてないなと思うときに、クイックルワイパーを併用してたんだけど、こいつのおかげでそれがなくなった。

今年買った中で最高の一品。



Withings WS-50

http://www.withings.com/jp/ja/products/smart-body-analyzer

今年の後半くらいからジムにちゃんと行きだしたのだが、進捗管理用に購入。WiFiでデータを勝手に送信してくれるため、メモる必要がないのが便利。

難点は自分が使ってるRuntasticとの連動が有料アカウントのみってところ。

あと、なぜか現在の二酸化炭素量とか温度とかを測る機能がついてるのだけど、これが必要になった理由がやっぱり知りたいよね。



EPSON PULSENSE 脈拍計測機能付活動量計バンド PS-100BL

http://www.epson.jp/products/pulsense/ps100/

運動時の心拍数を図りたいというのもあって、試しに購入。Life Fitnessのトレッドミルと連動できるかどうかをいろいろ試したが、どうもペアリングできないようで非常に残念だった。

あと、バッテリの残量を表すのにバイブでそれを表したりするんだけど、寝てる時にバイブが動いたりするんで、ホント迷惑。たぶんこれ開発者が使ってないんだろうなって思える出来だった。

これは買って損した。



Moto 360 Sports

https://www.motorola.com/us/products/moto-360-sport

フィットネストラッカーとしてどれを買うか考えた結果、Android Wearをネタで一つ持っておくかと思って、購入。

Runtasticアプリの出来の話になるんだけど、Life Fitnessのトレッドミルとスマホを(USBで接続して)連動させた時、なぜかAndroid Wear側のRunアプリがジョギングモードになってしまい、トレッドミルの情報をアプリ側が拾ってくれないっていう残念な問題があるんで、ジムでは使わないことにしてる。



MacBook 2016 Early

http://www.apple.com/jp/macbook/

OSX版の開発環境として Mac Mini 2009 Earlyを使ってたのだけど、10.12からついにサポート対象外になったため購入。外でコードを書いたりする時は DELL XPS12を使っていたのだけど、数百グラムの差は大きかった。厳密には異なるけどSandyBridge世代のCore i5とでビルド時間が20分ほど短縮された。

後当然のことながらUSB-CなHDMI変換ケーブルとかも買った。

でもMac Mini 2016が出てたら絶対こっちは買ってなかっただろうなと

2016-08-04

How to use Microsoft IME's private mode on not IE/Edige

Windows 10 Anniversary updateに含まれるMicrosoft IMEの新機能でInternet ExplorerやEdgeを利用している場合にプライベートブラウジングモードに連動してIMEもプライベートモードにできるという機能が入ってる。ブラウザベンダーで働くブラウザ開発者してはこの機能を是非つけたいと思ったのだけど、どうもAPIが公開されていないということなので調べた。Nyaruruさんも軽く調査してたけど、その続き編みたいなものです。

どうもこんな感じのコールスタックでプライベートモードを見に来る。

ChildEBP RetAddr
0591d22c 6fab49e1 imjptip!PrivateDetector::PrivateDetector
0591d270 6fad9a58 imjptip!CTipFnPrivateModeManager::CTipFnPrivateModeManager+0x7e
0591d2a8 6fac9a16 imjptip!CTipFnPrivateModeManager::CreateInstance+0x35
0591d34c 6f63d614 imjptip!CTipProfileJPN::InitializeContextEditor+0x2556
0591d38c 6f62bb95 imetip!CTipContextEditor::Initialize+0x74
0591d3c4 6f62b55a imetip!CTipContextEditorMgr::InitContextEditor+0x53
0591d420 6f661404 imetip!CTipContextEditorMgr::OnProfileMgrEvent+0x44
0591d45c 6f6230ac imetip!CTipContextEditorMgr::_OnProfileMgrEvent+0x44
0591d478 6f623b54 imetip!Tiputil::CTipProfileMgrEventSink::OnProfileActivated+0x5c
0591d4c4 6f623c3d imetip!CTipProfileMgr::CallOnProfileActivated+0xc4
0591d4e0 6f6239b4 imetip!CTipProfileMgr::ActivateProfileProc+0x80
0591d554 6f6591e6 imetip!CTipProfileMgr::OnActivated+0x124
0591d568 6f61c795 imetip!Tiputil::TextInputProcessorActivateSink::OnActivated+0x61
0591d5a8 6f61ca02 imetip!CTextInputProcessor::CallOnActivated+0x45
0591d5d4 6f61d43f imetip!CTextInputProcessor::ActivateProc+0x6c
0591d608 769048f9 imetip!CTextInputProcessor::ActivateEx+0x4f
0591d63c 7691db53 MSCTF!CTip::Activate+0x63

このPrivateDetectorというクラスでInternet ExplorerとEdge用に専用コードが存在してる。FirefoxはUWPではないので、Internet Explorerを見ると、Internet Explorerの時だけ (判定にIERTUTIL.DLLのIEConfiguration_GetDWORDを利用)、IERTUTIL.DLLに存在する特別な関数 (LCIEIsCurrentProcessInPrivate) を呼び出して、それの値でプライベートブラウジングモードかどうかを判別してるぽい。

まぁIERTUTIL.DLLの関数ってエクスポート名前を公開してないのでMAKEINTRESOURCEか何かで無理やり関数エントリを取ってきて、これをフックしてしまえば他のブラウザでもプライベートモードが使えるんじゃないかと。

ただ、IMEベンダが同じことしたくてもできないってのが本当にダメなAPI設計だなと思う。

追記 (8/6)

なお実際にテスト実装してみたところ、LCIEIsCurrentProcessInPrivateのフックだけでプライベートモードとかの切り替えできた。

2016-07-19

ARMのIPビジネス

自分で理解している範囲でARM IPビジネスについて書いておく

ARM命令セット

ARM自体は数年周期で自身の命令セットにいろいろ追加してきてる。ARMv7-aと言っても、Cortex-A8世代からCortex-A15世代でいくつか拡張を持ってて、例えば割り算命令なんてのはCortex-A15世代で実装されたもの。

これもライセンスされていて、ARMが作った命令セットを実装した互換CPUというものを作ることが可能。AppleのAシリーズやQualcommのハイエンドチップらへん (最近ではSnapdragon 820) は自身で設計している。最近はNVIDIA (Nexus 9で採用されたもの) やSamsungやAMD (K12?) も自身で設計してる。


ARMコア

互換CPUということではなくて、ARMが設計したCPUデザインをライセンスしてもらう方法もある。ARM採用のSoCを作ってる場合の大体の会社はこれ。QualcommはSnapdragon 820のように自身で設計している場合もあるけど、ミッドレンジ・ローエンドのSoCの場合は、ARMデザインのコアを利用してSoc提供してる。今時のスマフォで使うようなミッドレンジだとCortex-A12とかCortex-A53とか使ってるし、組み込みとかのローエンドだとA5とかA7とかA9とかかな?

そのため各SoCでのCPUのパフォーマンスの違いはクロック数やリビジョンくらいしかないけど、CPUのデザインを作ることないので、参入しやすいが、物理層の実装はやらないといけない。

なお、命令セットによってはオプションだったりするので、Cortex-A53採用したといっても暗号化エクステンションが入ってない実装とかも作ることができる。事実Cortex-A9の時代にNVIDIAがNEON (SIMD命令セット) が実装されていないSoCを提供した話は黒歴史としてみんな覚えている話。


物理設計

ARMのセミナーに行くとわかるとは思うが、最近のARMはシリコン設計まで起こしたデザインも持っている。このハードマクロ実装だと2GHz目標で持っていけるとか。物理層の実装までライセンスがあるのが面白いところ。


なお、ルネサスやNXP (元フリースケール) のように自社で独自IPを持っている会社もARMのライセンスの元でARMのCPUを採用したSoCを提供してて、最近はこっちが主流だったりする。市場競争力的にはインテルがモデム内蔵のatomなSoCを止めたところなので、ちょうどARMの独占って感じになりそうなので、ソフトバンクが買収するタイミングとしては抜群なのだけど、買ってどうするんだろってところだね。

2016-06-10

自分用async / await functionsメモ

Firefox / SpiderMonkey

Bug 1185106 - Implement async functions (ES7 proposal)

もともとインターンがオーナーだったけど、araiさんが直してる

Safari / JavaScript Core

Bug 156147 - [JSC] implement async functions proposal

IgaliaCaitlinが書いた。でConstさんがReviwer

Chrome / V8

Issue 4483 - V8 - Feature Request: Support async/await functions

InitialコードはIgaliaのCaitlinが書いた。でも今はGoogle自身で直してる。

2016-01-08

How to add API status to Firefox Platform Status

ChromeEdgeWebKit (決して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/に投げれば拾ってくれるはず。