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-11-25

Android 4.4 WebView / Stock Browser

Androidのソースコードを先ほど同期したら、いろいろ変わってた。

external/webkitがめでたく4.4から削除されてた。そしてwebview自体Chromium/Blinkベースのものに変更。

標準ブラウザ自体のコードは、未だにpackages/apps/Browserに存在する。これはWebViewClassicを使わないのでそのままBlinkが使われると。

なので標準ブラウザは未だにOEMが選択可能ではある (WebViewがそのまま使えるんで)。でもchromium portベースになるんだから標準ブラウザと言っても今までよりマシなんじゃない? あと各OEMのカスタマイズはWebKitからBlinkに変わったからいろいろ変わって大変そうだね (WebKitとして考えてもAndroid portからChromium portに変わったからということでね)

PackageManager使ってWebViewをデバイス組み込みのもの使うとかインストールしたもの(Chrome経由)使うとかの選択肢を作るかと思ったら入れなかったところが、今後のWork Itemなんだろうなと。

2013-11-22

ATOK 2013をWindows 8.1で使うと仮想マシン接続が終了時にハングアップする

最近Hyper-Vクライアントを試しに使っているのだが、終了時にハングアップするんでちょっとだけ困ってる。

でなんでハングしてんだろと思って軽く見てみた。

メインスレッドの状況。mstscatかな?原因は。

0:016> ~0k
Child-SP          RetAddr           Call Site
000000d5`aa80b778 00007ffb`93431148 ntdll!NtWaitForSingleObject+0xa
000000d5`aa80b780 00007ffb`69814e92 KERNELBASE!WaitForSingleObjectEx+0x94
000000d5`aa80b820 00007ffb`69819ce4 mstscax!DllUnregisterServer+0x166726
000000d5`aa80b850 00007ffb`69aa5205 mstscax!DllUnregisterServer+0x16b578
000000d5`aa80b890 00007ffb`69aa2bbf mstscax!DllUnregisterServer+0x3f6a99
000000d5`aa80b930 00007ffb`699bfaed mstscax!DllUnregisterServer+0x3f4453
000000d5`aa80b980 00007ffb`699b7d68 mstscax!DllUnregisterServer+0x311381
000000d5`aa80b9e0 00007ffb`698b756c mstscax!DllUnregisterServer+0x3095fc
000000d5`aa80ba20 00007ffb`698a8715 mstscax!DllUnregisterServer+0x208e00
000000d5`aa80ba80 00007ffb`698aac69 mstscax!DllUnregisterServer+0x1f9fa9
000000d5`aa80bb00 00007ffb`93fe2524 mstscax!DllUnregisterServer+0x1fc4fd
000000d5`aa80bb90 00007ffb`93fe6773 USER32!UserCallWinProcCheckWow+0x140
000000d5`aa80bc50 00007ffb`776c52cb USER32!CallWindowProcW+0x93
000000d5`aa80bcb0 00007ffb`776bfeb6 System_Windows_Forms_ni+0x9052cb
000000d5`aa80bde0 00007ffb`77031e63 System_Windows_Forms_ni+0x8ffeb6
000000d5`aa80beb0 00007ffb`77651447 System_Windows_Forms_ni+0x271e63
000000d5`aa80bf80 00007ffb`7cba3ebe System_Windows_Forms_ni+0x891447
000000d5`aa80c010 00007ffb`93fe2524 clr!UMThunkStub+0x6e
000000d5`aa80c0a0 00007ffb`93fe3812 USER32!UserCallWinProcCheckWow+0x140
000000d5`aa80c160 00007ffb`93fe38cd USER32!DispatchClientMessage+0xa2
000000d5`aa80c1c0 00007ffb`9609838f USER32!_fnDWORD+0x2d
000000d5`aa80c220 00007ffb`93fe129a ntdll!KiUserCallbackDispatcherContinue
000000d5`aa80c2a8 00007ffb`698a6701 USER32!NtUserDestroyWindow+0xa
000000d5`aa80c2b0 00007ffb`77635883 mstscax!DllUnregisterServer+0x1f7f95
000000d5`aa80c2e0 00007ffb`776c328f System_Windows_Forms_ni+0x875883
000000d5`aa80c3e0 00007ffb`776c2c91 System_Windows_Forms_ni+0x90328f
000000d5`aa80c440 00007ffb`776c024e System_Windows_Forms_ni+0x902c91
000000d5`aa80c4a0 00007ffb`78e11cf8 System_Windows_Forms_ni+0x90024e
000000d5`aa80c4e0 00007ffb`802950fa System_ni+0x291cf8
000000d5`aa80c510 00007ffb`80296d32 vmconnect_ni!COM+_Entry_Point <PERF> (vmconnect_ni+0xc50fa)
000000d5`aa80c5a0 00007ffb`7cb84113 vmconnect_ni!COM+_Entry_Point <PERF> (vmconnect_ni+0xc6d32)
000000d5`aa80c670 00007ffb`7cb83fde clr!CallDescrWorkerInternal+0x83
000000d5`aa80c6b0 00007ffb`7caeee66 clr!CallDescrWorkerWithHandler+0x4a
000000d5`aa80c6f0 00007ffb`7caeeba6 clr!CallDescrWorkerReflectionWrapper+0x1a
000000d5`aa80c740 00007ffb`79c76bac clr!RuntimeMethodHandle::InvokeMethod+0x46a
000000d5`aa80cd40 00007ffb`79c7f3b3 mscorlib_ni+0x486bac
000000d5`aa80cdb0 00007ffb`7cb84113 mscorlib_ni+0x48f3b3
000000d5`aa80ce30 00007ffb`7cb83fde clr!CallDescrWorkerInternal+0x83
000000d5`aa80ce80 00007ffb`7cb889a3 clr!CallDescrWorkerWithHandler+0x4a
000000d5`aa80cec0 00007ffb`7cc53a2e clr!MethodDescCallSite::CallTargetWorker+0x251
000000d5`aa80d080 00007ffb`7cc53596 clr!DispatchInfo::InvokeMemberWorker+0xebe
000000d5`aa80dc30 00007ffb`7cc5332f clr!DispatchInfo::InvokeMemberDebuggerWrapper+0x1c6
000000d5`aa80dd90 00007ffb`7cc52f02 clr!DispatchInfo::InvokeMember+0x461
000000d5`aa80e080 00007ffb`7cc52d6c clr!InternalDispatchImpl_Invoke+0x1ed
000000d5`aa80e1a0 00007ffb`7cc52cae clr!InternalDispatchImpl_Invoke_CallBack+0xb2
000000d5`aa80e200 00007ffb`698af574 clr!InternalDispatchImpl_Invoke_Wrapper+0xf8
000000d5`aa80e2a0 00007ffb`698af771 mstscax!DllUnregisterServer+0x200e08
000000d5`aa80e350 00007ffb`698b27ff mstscax!DllUnregisterServer+0x201005
000000d5`aa80e3a0 00007ffb`699c2f26 mstscax!DllUnregisterServer+0x204093
000000d5`aa80e420 00007ffb`69aa37b5 mstscax!DllUnregisterServer+0x3147ba
000000d5`aa80e450 00007ffb`69aa3fbf mstscax!DllUnregisterServer+0x3f5049
000000d5`aa80e480 00007ffb`69aa3d70 mstscax!DllUnregisterServer+0x3f5853
000000d5`aa80e4e0 00007ffb`69aa388a mstscax!DllUnregisterServer+0x3f5604
000000d5`aa80e540 00007ffb`69aa38dd mstscax!DllUnregisterServer+0x3f511e
000000d5`aa80e580 00007ffb`696e3f05 mstscax!DllUnregisterServer+0x3f5171
000000d5`aa80e5b0 00007ffb`93fe2524 mstscax!DllUnregisterServer+0x35799
000000d5`aa80e5e0 00007ffb`93fe2387 USER32!UserCallWinProcCheckWow+0x140
000000d5`aa80e6a0 00007ffb`770c7170 USER32!DispatchMessageWorker+0x1a7
000000d5`aa80e720 00007ffb`7704b1a1 System_Windows_Forms_ni+0x307170
000000d5`aa80e7f0 00007ffb`7704a97f System_Windows_Forms_ni+0x28b1a1
000000d5`aa80e9f0 00007ffb`7704a33f System_Windows_Forms_ni+0x28a97f
000000d5`aa80eb40 00007ffb`802ab599 System_Windows_Forms_ni+0x28a33f
000000d5`aa80ebd0 00007ffb`7cb84113 vmconnect_ni!COM+_Entry_Point <PERF> (vmconnect_ni+0xdb599)
000000d5`aa80ed30 00007ffb`7cb83fde clr!CallDescrWorkerInternal+0x83
000000d5`aa80ed70 00007ffb`7cb889a3 clr!CallDescrWorkerWithHandler+0x4a
000000d5`aa80edb0 00007ffb`7cc591aa clr!MethodDescCallSite::CallTargetWorker+0x251
000000d5`aa80ef60 00007ffb`7cc5999a clr!RunMain+0x1e7
000000d5`aa80f140 00007ffb`7cc59893 clr!Assembly::ExecuteMainMethod+0xb6
000000d5`aa80f430 00007ffb`7cc59372 clr!SystemDomain::ExecuteMainMethod+0x506
000000d5`aa80fa40 00007ffb`7cc592c6 clr!ExecuteEXE+0x3f
000000d5`aa80fab0 00007ffb`7cc59d84 clr!_CorExeMainInternal+0xae
000000d5`aa80fb40 00007ffb`7e487ced clr!CorExeMain+0x14
000000d5`aa80fb80 00007ffb`84ebea5b mscoreei!CorExeMain+0xe0
000000d5`aa80fbd0 00007ffb`95e815cd MSCOREE!CorExeMain_Exported+0xcb
000000d5`aa80fc00 00007ffb`960743d1 KERNEL32!BaseThreadInitThunk+0xd
000000d5`aa80fc30 00000000`00000000 ntdll!RtlUserThreadStart+0x1d

ということでmstscax.dllが何者かというと

0:016> lmvm mstscax
start             end                 module name
00007ffb`695f0000 00007ffb`69c52000   mstscax    (export symbols)       C:\WINDO
WS\system32\mstscax.dll
    Loaded symbol image file: C:\WINDOWS\system32\mstscax.dll
    Image path: C:\WINDOWS\system32\mstscax.dll
    Image name: mstscax.dll
    Timestamp:        Sat Oct 05 16:36:30 2013 (524FC17E)
    CheckSum:         0066305A
    ImageSize:        00662000
    File version:     6.3.9600.16421
    Product version:  6.3.9600.16421
    File flags:       0 (Mask 3F)
    File OS:          40004 NT Win32
    File type:        1.0 App
    File date:        00000000.00000000
    Translations:     0409.04b0
    CompanyName:      Microsoft Corporation
    ProductName:      MicrosoftR WindowsR Operating System
    InternalName:     mstscax.dll
    OriginalFilename: mstscax.dll
    ProductVersion:   6.3.9600.16421
    FileVersion:      6.3.9600.16421 (winblue_gdr.131004-2100)
    FileDescription:  Remote Desktop Services ActiveX Client
    LegalCopyright:   c Microsoft Corporation. All rights reserved.

Hyper-Vクライアントで使ってるモジュールすね (RDPのやつ)

ハングアップはこのメインスレッド上のウィンドウプロシージャ上でこのActiveXコントロールへの呼び出しが帰ってこないからってことが原因。ただ、たぶんこれが待ってるイベントオブジェクトがなんだって話なんだけど、

0:016> ~9k
Child-SP          RetAddr           Call Site
000000d5`ce28cda8 00007ffb`934312ee ntdll!NtWaitForMultipleObjects+0xa
000000d5`ce28cdb0 00007ffb`93fe2a7f KERNELBASE!WaitForMultipleObjectsEx+0xe1
000000d5`ce28d090 00007ffb`93c81506 USER32!MsgWaitForMultipleObjectsEx+0x13f
000000d5`ce28d140 00007ffb`93caefae combase!CCliModalLoop::BlockFn+0x12a
000000d5`ce28d1a0 00007ffb`93de5cc0 combase!ClassicSTAThreadDispatchCrossApartmentCall+0x1de
000000d5`ce28d210 00007ffb`93c7e930 combase!CRpcChannelBuffer::SendReceive2+0x656
000000d5`ce28d450 00007ffb`93de27a7 combase!CCtxComChnl::SendReceive+0x2e0
000000d5`ce28d630 00007ffb`93c3bf3d combase!NdrExtpProxySendReceive+0x47
000000d5`ce28d660 00007ffb`93de1d2b RPCRT4!NdrpClientCall3+0x374
000000d5`ce28da20 00007ffb`93c71b22 combase!ObjectStublessClient+0x12b
000000d5`ce28dda0 00007ffb`93caf27c combase!ObjectStubless+0x42
000000d5`ce28ddf0 00007ffb`93caf33e combase!CStdMarshal::RemoteAddRef+0xe8
000000d5`ce28de80 00007ffb`93cb6db7 combase!CStdMarshal::ConnectCliIPIDEntry+0xb0d
000000d5`ce28df50 00007ffb`93cb4cf2 combase!CStdMarshal::UnmarshalIPID+0x2f3
000000d5`ce28e050 00007ffb`93cb4f9f combase!CStdMarshal::UnmarshalObjRef+0x142
000000d5`ce28e120 00007ffb`93cb901e combase!UnmarshalObjRef+0x136
000000d5`ce28e1a0 00007ffb`87a4f879 combase!_CoUnmarshalInterface+0xc2
000000d5`ce28e280 00007ffb`87a5290f twinapi_appcore!ValidateStreamAndUnmarshalInterface+0x9d
000000d5`ce28e340 00007ffb`8862cfff twinapi_appcore!CoreQueryWindowService+0x34f
000000d5`ce28e3f0 00007ffb`88632f92 twinapi!CInputPaneEventSource_GetInstance+0x2b
000000d5`ce28e420 00000000`67df484e twinapi!CImmersiveFrameworkInputPane::Unadvise+0xaa
000000d5`ce28e470 00000000`67df48c4 ATOK26TIP!DllInstall+0x13841e
000000d5`ce28e4b0 00000000`67cbee7f ATOK26TIP!DllInstall+0x138494
000000d5`ce28e4e0 00007ffb`95c024cd ATOK26TIP!DllInstall+0x2a4f
000000d5`ce28e520 00007ffb`95c023fb MSCTF!CThreadInputMgr::_DeactivateTip+0xc9
000000d5`ce28e600 00007ffb`95c022b7 MSCTF!CThreadInputMgr::ActivateInputProfile+0x363
000000d5`ce28e6c0 00007ffb`95c02196 MSCTF!CThreadInputMgr::OnCleanupContextsEnded+0xaf
000000d5`ce28e740 00007ffb`95c02159 MSCTF!CCleanupShared::`scalar deleting destructor'+0x26
000000d5`ce28e770 00007ffb`95bff6c5 MSCTF!CCleanupShared::_Release+0x19
000000d5`ce28e7a0 00007ffb`95bfdbc4 MSCTF!CThreadInputMgr::_CleanupContexts+0xd5
000000d5`ce28e7e0 00007ffb`95bfdacf MSCTF!CThreadInputMgr::Suspend+0x74
000000d5`ce28e810 00007ffb`95c00054 MSCTF!CThreadInputMgr::OnActivationChange+0xc6
000000d5`ce28e8a0 00007ffb`95c0123a MSCTF!CThreadInputMgr::Deactivate+0x54
000000d5`ce28e8f0 00007ffb`95c01e81 MSCTF!CicBridge::DeactivateIMMX+0x9b
000000d5`ce28e940 00007ffb`95c01de0 MSCTF!_CtfImeDestroyThreadMgr+0x79
000000d5`ce28e970 00007ffb`95fc43a8 MSCTF!CtfImeDestroyThreadMgr+0x30
000000d5`ce28e9a0 00007ffb`95c01efd IMM32!ActivateOrDeactivateTIM+0x64
000000d5`ce28e9d0 00007ffb`93fe485d MSCTF!TF_Notify+0x207
000000d5`ce28f190 00007ffb`93fe3a85 USER32!CtfHookProcWorker+0x19
000000d5`ce28f1c0 00007ffb`93fe99b2 USER32!CallHookWithSEH+0x25
000000d5`ce28f200 00007ffb`9609838f USER32!_fnHkINDWORD+0x1e
000000d5`ce28f250 00007ffb`93fe129a ntdll!KiUserCallbackDispatcherContinue
000000d5`ce28f2d8 00007ffb`6983593b USER32!NtUserDestroyWindow+0xa
000000d5`ce28f2e0 00007ffb`699bfdbd mstscax!DllUnregisterServer+0x1871cf
000000d5`ce28f320 00007ffb`69aa37b5 mstscax!DllUnregisterServer+0x311651
000000d5`ce28f3a0 00007ffb`69aa3fbf mstscax!DllUnregisterServer+0x3f5049
000000d5`ce28f3d0 00007ffb`69aa3d70 mstscax!DllUnregisterServer+0x3f5853
000000d5`ce28f430 00007ffb`69aa5406 mstscax!DllUnregisterServer+0x3f5604
000000d5`ce28f490 00007ffb`69aa5626 mstscax!DllUnregisterServer+0x3f6c9a
000000d5`ce28f4f0 00007ffb`69aa4c38 mstscax!DllUnregisterServer+0x3f6eba
000000d5`ce28f750 00007ffb`699c5454 mstscax!DllUnregisterServer+0x3f64cc
000000d5`ce28f790 00007ffb`69aa4806 mstscax!DllUnregisterServer+0x316ce8
000000d5`ce28f7f0 00007ffb`698157ed mstscax!DllUnregisterServer+0x3f609a
000000d5`ce28f850 00007ffb`95e815cd mstscax!DllUnregisterServer+0x167081
000000d5`ce28f880 00007ffb`960743d1 KERNEL32!BaseThreadInitThunk+0xd
000000d5`ce28f8b0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d

これがおそらく待ってるスレッド。TSF/CiceroのDeactiveTIPから呼ばれたATOKがUnadvise呼ぶんだけど、こいつがTSFが抱えてるCOMオブジェクトを破棄する際にマーシャラー経由 (別スレッドがオーナーかな?。おそらくメインスレッド) で破棄しようとするんだけど、メインスレッドがこのスレッド待ってるから固まってる。

解決方法はATOK使うの止めろってことか、VMWareに戻せってことですね。ATOK側がUnadviseの呼び方変更すれば直る気がするけどさ。

結局のところCOMを使う時によくあるデッドロックの事例だった。

2013-11-01

WebView Hell

現在の(ちゃんと開発されている)OSってのは、だいたいが組み込みのHTMLレンダリングエンジンを持っていたりする。こういう流れは、Internet Explorer 3以降やAppleのCyberDog (誰も知らないと思うけど) が最初だと記憶してるけどね。iOSのおかげでWebViewという表現がよく使われるのでWebViewって言葉を使って書いてる。

Trident

独禁法の裁判でもOSなのかアプリなのかという点で争ったこともあるけど、現在の判断だとOSという判断で差し控えないと思う。Internet Explorer 4にShell Update (Active Desktopと呼んでたけど) が含まれていた関係上シェルの動作に支障がきたすことがあったが、このShell Updateをインストールしなかったとしてもいろんな問題が生じてた。

例えばOS初回起動時に表示される"ようこそ画面"はHTMLで書かれてて、HTML Component (HTC)を使って動いていたのだけど、これがInternet Explorerのバージョンアップでスクリプトエラーになるとか、OS側でWebViewを使ってるコードは結構問題を引き起こしてた。(Windows 2000以降のExplorerのビューもHTML使っててみたいな話があってだな、動作が変わってしまう機能が存在してた)

OSとWeb Browserは切り離してバージョンアップ可能な仕組みを持ってたのにも関わらず、OSモジュールとしてメンテナンスされている古いバージョンのモジュールを残す仕組みを持っていないためにいろんな問題を引き起こしてた。Windows XP移行は Side-by-Side (SxS) が導入されているので古いバージョンのモジュールを残すことはできるようにはなったけど、Internet Explorerはいまだにこれを利用してない (はず)。

その変わりといってはなんだけど、Shellに関するモジュールだけはInternet Explorer 7以降ではアップデートしないような構造にはなった (IEFRAME.DLLというバカでかいモジュールがその役目)。

レンダリングエンジンが変わってしまうってところに関しては解消されなかったけどね。

そんな感じでOS内蔵のレンダリングエンジンをOSとは別にアップデート可能にするといろんな問題を引き起こすのをMicrosoftは証明したわけだ。

Chrome + blink

Android上で利用できるWebViewはシステム組み込みのものを利用することになっている。これがAndroid 4.4からは独自WebKitベースのものからChromeのBlinkベースに変わりはするけども同じような問題を持つ。標準ブラウザがChromeになるっぽいってことからこれで非互換からおさらばできるって考えてる人が結構いるみたいなんだけど、それは無理だと思う。それはChromeのバージョンアップがシステムのWebViewのバージョンアップを含めることができるかどうかなんだ。

そもそもアプリケーションパッケージのインストール機構でOSのファイルを置換できる仕組みをGoogleは取らないだろうし、一つのアプリケーション (この例でいえばChrome) のバージョンアップでシステムのフラッシュに入ってるモジュールを置換できるような方式をとることができることを許すとなれば、それはある種の脱獄の穴を作ることになる。Playストアからアップデートさせるんじゃなくて、6週間ごとに新バージョンのChromeを含む新しいシステムアップデートが全端末にOTAされるとかって方式になるんだったら、その限りではないけどね!。

また一番重要なのはシステムのWebViewはChromeベースになったとしてもその使ってるコードはおそらくベンダがカスタマイズしたコードでしかなくなる。そのカスタマイズさがフラグメントの理由になるんだ。しかもApache 2とかBSDライセンスだと変更点は公開する必要がないから変更点はベンダしか知らないからブラックボックスでしかない。しかも独自のバグがあってもそれはGoogleがやったことではないからGoogleが直せないんだ。

だからハッピーになるかと言えば、まぁならないんじゃないかな?。回避策はえっと、Android認証のテストツールにBlinkのテストツールをすべてパスするようなことを要求するしかないんじゃない?そうすればマシになると思うよ。

Firefox OS

OSとブラウザが完全統合されている場合で一番いい例がFirefox OSになると思うからそこも最後に書く。

個人的にはFirefox OSはフラグメントはAndroidほどひどいものは起きないと予測してる。なぜかというとGecko部分のソースコードはMPL2ライセンスであるってこと。MPL2だとソースコードの変更点は要求があれば公開しないといけない。各ベンダでカスタマイズってのは今後起きるとは思うけど、変更点がわかる以上ブラックボックス化しないから、どうにか対処可能じゃないかと。

もちろんフラグメントは起きるだろうけど、Androidほどはひどくならないんじゃないかな。まぁ今後はどうなるかは興味ある。

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くらいしかないとは思ってたけどさ。

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

HTML5 Hacksが発売になったそうですが

オライリージャパンさんからHTML5 Hacksが発売になったようですが、ちょっとだけ手伝いました。献本とかもらっていないので私の名前が入ってるかどうか知りませんが。ご迷惑をおかけしました。

ここでのサンプルはhttps://github.com/html5hacksに置いてるのですが、サンプルを動かすのにはnode.jsが必要なのと、package.json が古いのでpackage.jsonの内容を見ながら必要なライブラリは手動でインストールしないと動かないはずです。

よろしく!



2013-09-17

ODROID-XUを買った

無事先週くらいから発送が始まってたらしくやっとFedex経由で送られてきました。ODROID-XUが$149で8GBのeMMCが$25。送料が$30で計$204ってところ。日本の代理点経由で買うと$149が28,000円くらいになるそうだけどさ。


Exynos 5 Octaを採用しているボードでCortex-A15とCortex-A7が4つずつ載ったものなのでbig.LITTLEが使えます。

Exynos 5210を採用したarndaleboardはでっかいボードでしたがbeagleboardと同じくらいの大きさです。

さぁてと何しよっかな。

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-09-03

Big Summer or Panic Buy

いきなりというかついにNokiaの端末部門をMicrosoftが買収することになったそうだ。買うんだったら2年遅い気がするんだが。まぁMicrosoftから刺客(現Nokia CEO)が送られて、Nokiaがとどめをさされただけとも言うけどね。

昔からの議論としてAppleを代表とする垂直統合モデルがいいのか、MicrosoftのWindowsを代表とする水平分業モデルがいいのかという解決困難な課題が存在する。Microsoftに関してはWindows PhoneになってAppleの二の舞のモデルを採用してみたけど、魅力的なデバイスが出ないためにシェアが伸びないという結論を出したってことだろう。

それに対しての解決策は、
  • 従来のWindowsで上手くいったように開発者フレンドリー (開発ツールと配布の自由さ) な方針に転換する
  • 自社でデバイスをリリースするモデルに変更。ジョブスが戻った時のAppleみたいな方向性 (この頃のAppleはAppleからライセンスを受けさえすればMac互換機を出荷することができた)。自社でハードウェアをやるのはXBoxで経験済み
のどっちかかなと。モバイル分野において水平分業がダメかというとGoogleのAndroidのようなモデルでも十分結果を出してるのだから必ずしも水平分業モデルが失敗というわけでもないが。

そこでMicrosoftは後者を選んで端末メーカーごと買ってしまったってことだね。実際こんな状態で買ってるんだから、Panic Buyってことだな。

この選択ってMicrosoft Wayじゃない気がするし、billgが現役だったらやらない気がするのは俺だけかな?

まぁ、NokiaでMaemo版Fennec作ってた某Romaxiaは今MicrosoftのOpen Source Technology Centerに移ったらしいけど、気付いたら同じ会社というオチは経験したくないね。

2013-08-19

Googleが抜けた後のWebKit

久々にwebkit-dev見てたら、こんなメールがあったりしてウケた。差出人はAppleの中の人ね。

Hi WebKittens,

I’d like to propose removing the Pointer Lock API code from WebKit. The code hasn’t been touched for 12 months, and AFAICT no ports are building with ENABLE(POINTER_LOCK).

Is anyone currently building (and shipping / planning to ship) this API?

Other thoughts?

-Kling

メールスレッド見ればわかるけど、TizenやってるEFL側とかから待てよ話が出てたりしてて、API自体は消されることはないんだけど、iOSで使わないからってこんな仕打ちなんだなって。

あとは、

Hello,

I’d like to propose removing support for the Microdata JS API (http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html) from WebKit. The specification has not gotten much adoption from either implementors or from site authors. Additionally, its use cases can all be addressed in author scripts, and if we see it becoming popular we can always bring it back.

The Mac port has never enabled the feature, and Blink has recently ripped out their support.

Thoughts?

-Sam

(I have done the work to rip it out, but it is not up for review yet - https://webkit.org/b/119480)

とか (これはマジで削除だったけど。http://trac.webkit.org/changeset/153772)。



2013-06-26

日経ソフトウェア8月号にJavaScript?の話で寄稿した

日経ソフトウェアの最新号の特集3のJavaScriptの話を寄稿した。JavaScriptといっても中身は、JavaScriptエンジン (JIT) とかHTMLレンダリングエンジンとかだけどな。



初級から中級をターゲットにした雑誌なのに、SpiderMonkeyのjsopcode書いてたり、YarrでのRegExpのJITでの生成コード貼り付けてたり、インラインキャッシュの話を書いてしまう (PolyICとかMonoICとかの細かい話は書いてないけどな) というような無茶ぶり原稿をどうにかわかりやすくしていただいた編集さんにはご迷惑おかけしました。

JavaScriptと書いているけどウェブブラウザがどういう動きをしているのかってのを説明している記事なんで興味があれば。

当分原稿書く仕事への体力はない気がする。。。

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-04-04

Blink

BlinkというWebKitフォークの話がやってきた。Googleにはエイプリールフールに発表してほしかったね。イースターで祝日だからしょうがないか。

GoogleのWebKitにまつわる話は2010年くらいにマウンテンビューで聞いたことがあるんだけど、Chromeチームはマージに非常に苦労しているという印象だった。だからフォークしてしまうってのはGoogleにとっては非常に正しい判断なんだろうなとは思うし、Googleの抱えている人の数からしてみればWebKitに固執する必要はなく、新しいレンダリングエンジンを投入するだろうなとは思ってたから、一年遅いなってのも印象でもある。

それよりもだ。興味があるのはレンダリングエンジンとかじゃなくて、WebKitというオープンソースプロジェクトの今後だ。実際WebKitはいろんな人たちが関わっているプロジェクトではあるけれど、Googleのチェックイン数が群を抜いてるものでもある。そこからGoogleが抜けることになるとは思うんだけど、ここからWebKit発のイノベーションが消えてしまうのかどうかが気になるところ。今後AppleとかSamsungがどうこのプロジェクトをドライブするのかが見もの。

WebKitは企業がOSSに参加しているものとしていい代表例の一つでもあったとは思うんだけど、実質企業コントロール化されたOSSプロジェクトがメインスポンサーを失うとどうなるのかといういい例になる気がしてる。MeeGoとかも末路はね。。。(Tizenは後継と言ってるけど、実際のところほとんどのコードを破棄してプロジェクトの新規作成に近いので後継と言う表現は間違ってると思う)

FirefoxというかGecko自体も (レイオフの結果) Netscapeというメインスポンサーが抜けた後、現在の形 (Mozilla FoundationからMozilla Foundation / Corporationという形) になるまで非常に苦労をしたわけだし。

あと、ここはLunascapeあたりにWebKitとBlink内蔵ブラウザを期待するんで頑張ってね。BlinkはAPI固まらなそうでChromium以外は苦労しそうだけどさ。

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

Galaxy Nexus (SC-04D)をroot化してSo-net 3Gでデザリングできるようにした

root化

Galaxy NexusをAndroid 4.1にアップグレードした場合は、CWM Recovery経由でSuperSUをインストールするのが簡単。CWM Recoveryについては以下などを参照に。
Galaxy Nexus(SC-04D)をCWM(ClockWorkMod) Recoveryで起動してROM全体をバックアップする方法
http://androidlover.net/smartphone/galaxynexus/sc-04d-clockworkmod-backup.html
SuperSUを含めてだったら、Nexus 7の話になるけど、手順としては、Galaxy Nexusでも同じ。
Nexus 7 root化 | Android 4.2(JOP40C) に SuperSU をインストールする方法
http://tabkul.com/?p=11203
カスタムカーネル入れる必要なかったので、こんな感じでさくっとroot化。これでデバッグもしやすい環境に。

デザリング情報の変更

So-net 3Gだとデザリングのアクセスポイントは当然のことながらドコモ純正とは異なる。そのためデザリングのアクセスポイントを変更しないといけないけど、ドコモのROMのままだとここを変更することはできない。そのためこの設定を持つデータベースを変更する必要がある。

これが参考になると思う。
[Galaxy S II] SC-02CでDocomo非公式テザリングを行う方法
http://thefocus.blog94.fc2.com/blog-entry-15.html
SQLite Editorなんて使わずにsettings.dbをPCにコピーしてsqlite3のコマンドツールを使って変更して、rootで元に戻せばいいだけだけどね。

New Tokyo Office

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

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


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

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


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

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

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

2013-03-10

確定申告がActiveX

ちまたじゃHTML5だって言っていても、電子政府を目指している日本政府の国税局は確定申告に使えるブラウザがInternet Explorerのみ (OSXでSafariは使えるけど、そもそも10.6のみ) になってた。昔はFirefox使えたんだけど。



ActiveXですよ、お兄さん。今までクライアントサイドのJavaを使ってたはずなんだけど、それを止めてActiveXって発想がなかった。ここにも韓流が (韓国はActiveX依存度が高い)。。。

まぁ、カードリーダー内の証明書にアクセスする手段がってところでこうなったんだろうけどね。

2013-02-17

JIT platform by major browser vendor (Feb 2013)

2013年2月の現時点での知っている範囲で。Operaは独自開発やめるから外した。

armarm (thumb2)mipspower pcsh4sparcx86x86-64
Chakra (Microsoft)N/A
(Microsoft says supprot, but their platform uses thumb2)
Yes
(Windows RT / Windows Phone 8)
NoNoNoNoYesYes
JSC (Apple/WebKit)YesYes
(Apple A6 - armv7s)
YesNo
(But Nintendo has port for WiiU)
YesNoYesYes
(Unix ABI only)
SpiderMonkey (Mozilla)YesNoLimited
(JaegerMonkey only)
No
(But TenFourFox team has port for JaegerMonkey)
NoLimited
(JaegerMonkey only)
YesYes
V8 (Google)YesNoYesNoYesNoYesYes

以下注意点。
  • Chakraはarmサポートと言ってるけど、彼らのプラットフォームではARMv7 + thumb2のみ。おそらくそれ以前のCPUはアンサポート
  • JSCはアセンブラ層のポートで行けるから様々なプラットフォームでJITが使える。ただしWin64 ABIはサポートしていない
  • mipsとsh4は各CPUベンダが実装してる
  • Windows RTとWindows Phone 8はThumb2を要求するけど、そもそもWindows Store AppやWindows Phone Appは、mmap/VirualAlloc系の特定ページを実行可能にするAPIを利用できないため、JITを実装することはできない

2012年の一番クレージーな実装はLow Level Interpreterってアイデア出してきたAppleだね。あんなアイデアが突然コミットされるんじゃ、OperaがJSC採用しないのもわかるよ。

2013-02-13

XPS12を買いました


いままでずっと使い続けているメインのノートPC (DELL XPS M1210。VAIO Pも持ってるけどこれはサブ) がバッテリが持たなくなってきたので (もちろん2度交換済み) 、さすがにまた互換バッテリ (もう純正が売ってない) を買うのもバカバカしくなってきたので、新しいノートPCを買うことにした。


こいつがいままで使っていたノートなんだけど、そもそもXPS M1210は13インチクラスのノートPCなのにいい意味で相当間違ってるノートPCで、
  • CPUがノートPCなのにソケット。なのでCore Duoモデルを買ったとしてもCore 2 Duoに換装可能
  • 標準オプション品のBluetooth 2.0がミニPCIカードで提供されてるので、Bluetooth 2.1を採用しているカードに換装可能
  • キーボードがユニット品なので、英語キーボードに換装可能
  • DELLの豊富な分解マニュアル
という具合だったので、最初に買った時から考えると以下のように構成を変えた。
  • CPUをCore 2 Duo T7200 (Intel VT使うため)
  • HDD 120GBをSSD 120GB
  • メモリを最大容量の4GB (でもチップセットの制限で4GBフルに使えない)
  • 英語キーボードをebayで入手して換装
さすがに買ってから約5年は経過してるし、そもそも、メモリも3.5GBくらいしか認識せずDirect3Dも10をフルサポートできない状態なので、今後の開発機としてはちょっと力不足になってた。

ということで、最低条件が英語キーボードモデルが選択可能で、メモリ8GB、画面が13インチ以下、重量が2kg以下クラスってところなので、それに合致するものを探すとこれだけ。
  • Apple MacBook Air 11インチ or 13インチ
  • Apple MacBook Pro 13インチ
  • DELL XPS 13
  • DELL XPS 12
  • Lenovo ThinkPad X230
あたりが候補になった。それ以外は英語キーボードモデルが存在しないという。。。サポートが米国の1-800でいいからASUSとかACERが英語モデルを通販のみで売ってくれればいいのにって。実際のところ、去年の秋にロンドン行ったときにノートPCを買おうとも思っていたのだけど、イギリスのPCってUK配列 (バックスラッシュの位置が違う) のであきらめた。キーボード配列がどれでもよかったら別にJIS配列でもいいしね。

でだ。予算的にMacBook ProとThinkPadが消えて、DELLのXPSかMacBook Airのどちらかってことに。

両方ともCPUは同じ (Appleはアップグレード可能)、メモリ8GB選択可能ってところ。OSXを選びたいのならMacBook Airだし、PCだったらDELLのどっちか。スタバとか勉強会とか行くとみんなMacばっかりってのを見るとひねくれている自分としてはMacを持ちたくないので (もともとNeXT大好きだったしNeXT CUBEの動体持ってるのにね)、DELLってことに。DELLの場合はフルHD液晶を選べるってのと安い (クーポンがあった) というのが一番の決め手だったけどね。

13インチか12インチかというところで、どうせならタッチパネルということでXPS 12をオーダーした。1/28にオーダーして着が2/13だから到着までが約2週間。クーポン使って10万切る値段になったので満足 (2月中旬になって5千円値下げしてたけどさ)。

始めこの筐体をニュース等で見たときに、自分が買うとは思いもしなかったんだけど (DELLさんすみません)、回転させて使うことはまずないと思う。


ACアダプタも結構小さい


ステッカーをいろいろゲットしなきゃだね。これは今まで使ってたPCはちょっと張りすぎだったけど。

Opera switches to WebKit + V8

去年の夏あたりから、HTMLとかCSSの標準化にかかわってた重要人物が辞めたりしてたんで、あれ?って思ってたんだけど、やっぱり来たかって感じ。
Opera gears up at 300 million users
http://www.opera.com/press/releases/2013/02/13/
On the same day as announcing that Opera has 300 million users, we're also announcing that for all new products Opera will use WebKit as its rendering engine and V8 as its JavaScript engine.
http://my.opera.com/ODIN/blog/300-million-users-and-move-to-webkit
そもそものここ数年間のOperaのビジネスモデルというのは、組み込み系のブラウザというところにあったはずだ。フューチャーフォン向けにOpera Miniを提供して、組み込み系にはPrestoベースのブラウザを提供すると。

一世代前のゲーム機ではよくOperaが採用されてたよね (WiiとかNintendo DSとか)。あとはテレビ (ブラビアとか)など。ただ任天堂でさえも現在はOperaじゃなくてWebKitベースのブラウザを採用してる状況 (WiiUと3DS。提供はACCESSだけど) や、Play Station 3なんて独自エンジンのブラウザからWebKitベースの独自ブラウザへ変更してる現状をみれば、明らかに状況が厳しくなってきている。

組み込みベンダから見てもACCESSが代表例になるかと思うけど、独自エンジンのブラウザからWebKitベースに変更してる。これはHTMLやCSSのスペックが複雑になってきて開発コストが増大してることと、WebKitでしか動かないようなWeb (標準として考えれば間違ってるWeb) が氾濫してきている (日本だって、楽天とかアメーバとかそんなんだよね)って考えれば、独自エンジンを持ち続けることのメリットよりもデメリットが大きくなってきている。

だから彼らのビジネスから考えればWebKitに移行してしまうってのは、ある意味正しい判断とは思う。拍手はしないけど(競争相手がいないってことはつまらないから!)、経営者的判断からすれば流石だねって感じ。

というところで、Operaのダニエルさんが何か言うかと思いきや、こうですか。はぁ。



うーん、Operaはやっぱどこかに買われてしまう運命な気がしてる今日この頃です。。。

2013-02-05

日本マイクロソフトがマルエツになっちゃったらしい

知り合いから教えてもらったんだけど、日本マイクロソフトが使ってる東京のビルで一番古くからあるものが調布にあるんだけど(マイクロソフト調布技術センター。略してCTC)、ここがいつの間にかGoogle Mapsで違うものになってる。

これがGoogle Map
一方正しいのがBing

AppleのiOSでも地図のトラブルあったけど、なんかのメタデータがおかしいとこうなっちゃうから、地図って難しいよね

2013-01-27

ArndaleBoardを買った

TIのOMAP5を使ったボードがほしかった (BeagleBoardPandaBoardも当然購入した) んだけど、OMAP5自体が出てこない今、サムスンのExynos 5 (IPはCortex-A15) を使ったボード、Arndale Boardがリリースされてたので買った。


オーダー自体はhowchip.comで行うんだけど、ここのサイト、さすが韓国って感じでInternet Explorer以外は警告がでるという造り。ARMの組み込みボード買うやつがIEでアクセスするかよって思うんだけどさすがだよね。ちなみに支払いはpaypal経由。オーダーしたのは12月上旬だったんだけど発送は1月の中旬 (FedEx経由)。だいたい一か月程度かかった。(発送元も韓国)

昔だったらARMの最新のIPを使ったのを先に出してくるのがTIって感じだったのに、現在の半導体製造の能力を示すかのようにCortex-A15を使ったチップはサムスンが最初のリリースになってた。実際これは第一世代でNexus 10とかにも使われてる電源食いまくりのCortex-A15のデュアルなんだけど、Exynos 5の第二世代になればbig.LITTLEなCortex-A15とCortex-A7のハイブリッドなコアが出てくる。第二世代になったらまた買わないといけないよね。でもそのころには、Cortex-A57とか出てるヨカーン。Cortex-A57は、Aarch64とAES/SHA-2のハードウェア実装があるからこっちのほうが楽しそうだね。

Cortex-A15といえばバッテリバカ食いしそうなアーキテクチャなんだけど、ARMv7-RやARMv7-Mとかで使えたSDIVがついに使えるってのが最適化屋としては美味しい。

まずは、cpuinfo。
/proc/cpuinfo                                                                   
shell@android:/ $ cat /proc/cpuinfo                                             
Processor       : ARMv7 Processor rev 4 (v7l)                                   
processor       : 0                                                             
BogoMIPS        : 2795.11                                                       
                                                                                
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt 
CPU implementer : 0x41                                                          
CPU architecture: 7                                                             
CPU variant     : 0x0                                                           
CPU part        : 0xc0f                                                         
CPU revision    : 4                                                             
                                                                                
Hardware        : ARNDALE                                                       
Revision        : 0000                                                          
Serial          : 0000000000000000
Featuresに idivaとidivtが入ってるってことはSDIVがサポートされてるってこと。

LinaroUbnutu portとかもあるんでいろいろ試せるんで楽しみ。

以下注意点。

  • デカい。BeagleBoard比で言えば6倍
  • HDMIはminiコネクタ。そのために変換アダプタ買うハメに
  • 内蔵のeMMC (4GB) にデフォルトでAndroid入れてあるので、MicroSDカードに入れることなく試せる
  • DISPスイッチの詳細は一切マニュアルに書いてないっていう適当さ。Forumではエンジニアに聞くよ的な言葉で終わってた。

2013-01-21

VAIO PにUbuntu 12.10をインストールする

インストール方法は省くけど、VAIO PにUbuntu 12.10をインストールした。



が、そのままではLinuxカーネルがPanicで起動できない。どうもgma500_gfxでクラッシュしてるようなので (ビデオチップのGMA500用ドライバね)、それを以下のようにブラックリスト行きにすれば起動するようになった。
# sudo sh
# echo 'blacklist gma500_gfx' > /etc/modprobe.d/blacklist-gma500.conf
# update-initramfs -k all -u
当然gma500のドライバが無効になるので、GUIで使ったときのスピードはより悪くなるけど起動できないよりはマシだけどね。

2013-01-17

Windows RTがJailbreak可能になったらしい

Windows RTは実行モジュールのシグネチャを見てて、それが署名されたものじゃないと動かなったわけだけど、そこらをどうにかすればJailbreakできるだろうなってのは思ってた。

ということは、当然こういうことやるよね。SpiderMonkeyだけど。