2009-12-31

今年まとめ Mozilla編

ずっとコミット権は持ってたんだけど、去年くらいからちゃんとアクティブに復帰し始めたんだっけなぁと。アクティブに動いてたら、誰からか「おまえ、復帰したの?」ってメール来てたのはウケたよなぁ

また、3.5はリリースされたけど、1.9.1のツリーが早く切られたおかげで、Acid 3 Testなバグを一つ間に合わせられなかったのが心残りだったかも。いろんな人がAcid Testのスコアをとやかく言う気持ちはわかるけど、Acid TestにSVGものがいっぱい入ってるのは個人的にはどうかと思うけどね。DOMとかCSSのレンダリングとかはわかるけどさ。

Thunderbirdはやっと3.0がリリース。荒削りだけどメジャーリリースされたのはよかった。ベータ版だと誰も使ってくれることもないし、問題点を把握できないからね。3.0については、最後の最後でGlodaの件を無理矢理入れたんだっけ。後で、David Ascher (Mozilla Messaging CEO) に「ホント、ありがとう。あれは助かった」って感謝されたんだけど、慢性的に人手不足だから、もう少しいろいろ手伝う羽目にはなるだろうね。

個人的には、MobileとEmbededingをもう少しやりたかったんだけど、Mobileはいい端末不足なのと、Embededingはもうすこし整理しないとダメだね。

来年は、、、、来年に考えます。

今年まとめ 個人編

今年は平穏に過ごすつもりが非常によくわからない年だった。というか、その兆しは去年の年末に、所属してた会社のUpper Managerが辞めることになったところから始まっていた気がする。

3月くらいにイヤーな雰囲気が会社にあって、結局のトコロ、5月末で退職する羽目になって、まさかの無職。そこの会社で学んだことと言えば、オープンソース業界のビジネスの幼稚ぶりと国からどう金を巻き上げるかという大手企業の動き。それに関しては、非常に勉強になった。

オープンソース業界は、ビジネスを組み立てられる人達がプロプラ業界に比べて圧倒的に不足してる。MBAとか取ってないオレでもそう感じるくらいお寒い状況。だから、辞める時にビジネス作る側でやってくれない?って打診された時は、正直結構悩んだけど断った。一番の理由は給料下がってまでそこの会社にいたいとは思わないからだけど、冷静に勝つプロセスと現在ある駒を考えると、勝つための駒が不足している状況で戦っても勝てるとは思えないのもある。ここでの駒というのは人数じゃなくて、質の話ね。ただオレの考えるあの会社が勝つための方向性については散々話していたので、それの一割でもやってくれれば、絶対生き残れるとは思うけどね。

退職したおかげでハロワに凄く詳しくなった。人生初ハロワだったんだけど、国のシステムってよく出来てるなぁと改めて関心。

また、景気が悪い状況で就職先見つけないといけないから、無職生活を満喫せずに、海外の会社何社か受けてたけど、条件が全くあわなくてって感じでいたら、どこかの組織に捕獲されてしまったのが今年の後半。一年前は想像できん状態だった。ホント、人生は先が読めん。

プライベートももうグタグタというか、まーいろいろあったなぁと。来年は平穏であればと

2009-12-22

ノースウエスト航空

最近デルタと統合したおかげで、マイレージサービスが無期限から2年(利用してれば、延長していく)に代わって、微妙な改悪になったんだけど、その統合後初利用。

米国の口の悪い人は、ノースウエスト航空のことをノースワーストと呼んでて、この航空会社は安いけどサービス微妙っていう認識な航空会社。ホントはAAとかが好きなんだけど、ノースウエストは安いのでたまに使ってる(しかも便数多いしね)。

前ノースウエストであったことといえば、機内サービスで提供されるスナックを窓際の客に投げて渡したとか、オンラインチェックイン済み (オンラインチェックインをすれば優先的にチェックインさせますと言ってたことがあった) なのに、チェックインしてない客の後ろに回されて、なおかつオンラインのカウンターじゃない方に送られそうになったとか(成田でだったんだけど、英語で暴れたらオンラインのカウンターへすぐ入れてくれた。ってなんだそれ)いろいろあったんだけど、今回もやってくれた。

いつも通路側の席をとるんだけど、食事のときになぜかオレの席に2人分の食事が運ばれて、「それスライドして、隣の人に渡してくれない?」って。すげーよ、ノースウエスト。さすがだ。

また、帰りも隣の人が寝てたら、おしぼりを前の席の背もたれの一番上に置くとか (寝てたから、起こさず渡すにはどうしたらいいかと考えた挙句だとは思うけど)、もう予想を超える感じ。

日本でもこんな感じの航空会社あってもいいと思うよ。安いけどサービス悪いみたいな。

2009-12-08

某掲示板で書かれていたので、一言

これ3.6 beta 5で直してある。たぶん、IMEで入力している最中にキャレット表示しようとして落ちる。キャレット表示の際に選択文字列(IMEの変換文字列だったような)を取りに行くんだけど、それが取れなくなるから。多分何かのページ推移が重なってる(or 変換文字列がキャンセルされたとか)んじゃないかなと思うけど、再現する方法わからなかった。

849 名無しさん@お腹いっぱい。 [sage] 2009/12/07(月) 18:22:13  ID:dweTbE/00 Be:
上の方じゃ荒らしの標的にされてるし
全然問題のない人にとってこの話題がうざいのはわかる

同じ症状で悩んでる人の参考となるように
自分の例を晒してみただけなんで見逃してくださいな

>>838
送ってるよー
新プロファイルにしてからのクラッシュシグネチャは全部
nsQueryContentEventHandler::GenerateFlatTextContent(nsIRange*, nsString&)

再現性がないからバグレポート送れないのが辛い

>>842
自分の場合3.0では同じ拡張でも安定していたのが
3.5になってから頻繁に落ちるようになった

>>830の他、プラグインはMozillaデフォルト、
Flash 10.0 r32とJava SE 6 U17だけであとは無効にしてる 

3.5で起きる原因は、そこのコード3.5からだから。3.5ツリーもapprove request取ろうかな、やっぱり。某先生も引っかかってるらしいし。

ちなみに、これはcrashkillの流れで直したもののひとつ。コメントから見る限りCJKな人だらけっぽいから、IMEがらみ(IME使わないと通らないような場所)の話みたいだけどね。

だから、再現方法がわからなくても、クラッシュネタの場合は、クラッシュレポーターで送ってください。TOP100に入るようなものであれば、見てるから。

補足(2009/12/22)

1.9.1.8へのapproveをもらったから、Firefox 3.5.8でも直ります。

2009-12-07

コンパイラ(VS2005のx64)マジ死んでくれ

手元でビルドした、Thunderbird 3.0 x64が終了時に自分自身を起動してくれるという倒れそうなバグがなんかあって、調べてみたところ、

0:000> u 00000001`3f508afd
thunderbird!XRE_main+0x190d [c:\workspace\mozilla-hg\comm-1.9.1\mozilla\toolkit\xre\nsapprunner.cpp @ 3369]:
00000001`3f508afd ff5028          call    qword ptr [rax+28h]
00000001`3f508b00 39ac2498000000  cmp     dword ptr [rsp+98h],ebp ; [rsp + 0x98] -> needRestart, @ebp -> 1
00000001`3f508b07 0f8491010000    je      thunderbird!XRE_main+0x1aae (00000001`3f508c9e)
00000001`3f508b0d 85f6            test    esi,esi
00000001`3f508b0f 7414            je      thunderbird!XRE_main+0x1935 (00000001`3f508b25)
00000001`3f508b11 488b0dd0b51301  mov     rcx,qword ptr [thunderbird!gSavedVars+0x8 (00000001`406440e8)]
00000001`3f508b18 4885c9          test    rcx,rcx
00000001`3f508b1b 743b            je      thunderbird!XRE_main+0x1968 (00000001`3f508b58)
00000001`3f508b1d ff15e553cc00    call    qword ptr [thunderbird!_imp_PR_SetEnv (00000001`401cdf08)]
00000001`3f508b23 eb33            jmp     thunderbird!XRE_main+0x1968 (00000001`3f508b58)
00000001`3f508b25 488d0d14a1cc00  lea     rcx,[thunderbird!kProfileManagerURL+0xd40 (00000001`401d2c40)]
00000001`3f508b2c ff15ce53cc00    call    qword ptr [thunderbird!_imp_PR_GetEnv (00000001`401cdf00)]
00000001`3f508b32 4885c0          test    rax,rax
00000001`3f508b35 7414            je      thunderbird!XRE_main+0x195b (00000001`3f508b4b)
00000001`3f508b37 403828          cmp     byte ptr [rax],bpl
00000001`3f508b3a 740f            je      thunderbird!XRE_main+0x195b (00000001`3f508b4b)

0:000> r @ebp
ebp=1

0:000> x
00000000`002ffc40 argc = 0
00000000`002ffc48 argv = 0x00000000`00000001
00000000`002ffc50 aAppData = 0x00000000`01f232b0
00000000`002ff8e0 localIniFile = class nsCOMPtr
00000000`002ff9a0 appData = class ScopedAppData
00000000`002ff8d0 rv = 0
00000000`002ff8d8 iniFile = class nsCOMPtr
00000000`002ff968 parser = class nsINIParser_internal
00000000`002ff8f8 overrideLF = class nsCOMPtr
00000000`002ff910 greDir = class nsCOMPtr
00000000`002ff8f8 lf = class nsCOMPtr
00000000`002ff950 osABI = class nsDependentCString
00000000`002ff938 needsRestart = 0
 :
 :

というか、@ebpが0のつもりで生成してる気がするんだけど、1だし。

Visual Studio 2005のx64コンパイラってOxとか02とかの最適化オプション使うと不思議なコードをたくさん生成してくれるんだけど、2005のx64コンパイラ使う気失せた。2008も0xだと変なコード吐くんだよな。。。

2009-12-02

text-overflow

画像を投稿してみるテスト。

なんか、Gecko以外実装されてんだよね。っていうか、どのブラウザもellipsisとclip以外の場合は実装されてないみたいだけど、やっつけな中途半端好きじゃないから、たぶんstringの時も動くようにするかも。

2009-12-01

GPU!GPU!

MicrosoftのIEで役職的に一番偉い人がIE9ではDirect2Dでグリグリ!って言って宣伝したのに、FirefoxでもDirect2Dの話がでちゃって、インパクトなさすぎな状態なんですが、cairoとかpixmanの話を触れておく。

FirefoxでDirect2Dを使うってのは、cairoのバックエンドにDirect2Dバックエンドを追加するってことなんだけど、cairoの現在の開発版にはそれ以外にも、OpenVGとOpenGLとSkiaのバックエンドがすでに存在します。OpenGL版のパフォーマンスについては、このメールスレッドにいろいろ書いてあります。グラフィック周りやってるJeffも食いついてるので、将来的には、UNIX版においてのOpenGLサポートってのは考えるんじゃないのってところです。

また、pixmanの開発版には、ARM NEONのサポート (ARMのCortext-A8からのSIMD。x86的にはSSE2のようなもの) がNokiaによってリライトされてて (N900って、TIのOMAP3だから、NEONサポートしてるんだよね)、結構パフォーマンスアップしてたりします。パフォーマンスデータはこのメールスレッド参照のこと。

Firefox 3.6だと間に合わないけど、3.7だとこれらのいくつかは考慮されるんじゃないかな?なんてね。

2009-11-27

Email Security Expo & Conference 2009で話してきました

先日、Email Security Expo & Conference 2009で、Thunderbird 3の話をしてきました。資料はMozilla Japanのサイトで公開する予定です。(公開できない場合は、大人の事情ということでご理解ください)

その際に、いくつか質問を受けたことの補足しておきます。

ThunderbirdやFirefoxの自動更新は、Mozillaのサイトを参照してますが、これを企業側のサーバーに変更することは可能です。アップデート用のサーバーを構築する方法については、以下のドキュメントが参考になるかと思います。

https://developer.mozilla.org/ja/Setting_up_an_update_server

また、集中管理の方法については、https://developer.mozilla.org/ja/MCD%2c_Mission_Control_Desktop_AKA_AutoConfigを見ると参考になると思います。

企業系に関するいろんな機能ってのは、FirefoxなりThunderbirdなり、実装されているのだけど、これらを集めたいい情報源がないのは、これからの課題にしておきます。

追記。資料張り付けておきます。

2009-11-19

ウィジェット、ウザい

どこのケータイもブラウザメーカーもウィジェット、ウィジェットってやってるけど、あれ、どうみてもPointCast再び!ってしか見えないんだよね。

PointCastって知らない人多いと思うけど、約10年前にはやったWebアプリみたいなもので、データをユーザーに配信(プッシュ配信って言ってたけど、実際には自分で取りに行ってる)して、デスクトップに表示するもの。詳しくはウィキペディアの英語記事でも見てくれ。

対抗で、MicrosoftもActiveChannelってのがあってだな、、、って話がそれた。

PointCastのときは、PointCast上からデータが配信されてくるイメージなのだけど、ウィジェットってのも、それが自身のサーバーから持ってくるだけで、やってること同じ。昔はPointCastに縛られていたけど、今度はWeb標準技術だけでできるようになったってことだけ。

あのころに比べて、ネットワーク帯域は上がっていて、コストは劇的に下がってるわけだから、PointCastが叩かれていた帯域を占有するという問題は解消されるんだけど、人間はそんなにリアルタイムに情報をほしがるのか?ってのと、情報が氾濫してきて整理できなくなるという問題の二つを全く解決できていないので、ウィジェットもまた廃るだろうね。

2009-11-10

ラーメンズ

Azaの話はいつも面白いよね。去年のDevelopers Conferenceも観に行きたかったんだけど、そのときに所属してた会社に呼び出されたため行けなかったんだよね、リアルに人が死んでもおかしくないトラブルあって (よくバグくらいで人は死なないよっていうけど、今度は本当な話)。

Azaもラーメンズ(またラーメンかよ)知ってるってのはさすがだと思ったが、ラーメンズと言ったら、寿司屋のネタで盛り上がる。これね。

でも、次の日の朝、築地の寿司屋で全員そのネタをやり忘れるというガッカリな展開。あーあ。

2009-11-09

nsIScriptableUnicodeConverterという名前のInterfaceができた理由

Firefox Developers Conferenceでこぼれ話として話したけど、来ていない人のためにも書いておく。ここで出てくるFrankってのは、多言語対応やってたNetscapeの人。

誰か「Chatzillaが日本語通らない」
自分「見てみたけどASCIIそのまま垂れ流しだからだね」
自分「じゃ、スクリプト経由で使える文字変換Interface作らないと。Chatzilla自体がXUL+JSのみだから」
自分「IRCのプロトコルってcharsetの指定あったっけ?ま、エンコードを複数対応できるようにすればいいか」
自分「Frank、こん感じでInterface追加していい?Chatzillaで文字コード変換が必要だから。」
Frank「いいよ」

って軽いノリで作ったんだけど、何も考えてない (スクリプトから使えるコンバータが必要だから、そのままの名前でいいや。たぶんここ(Chatzilla)でしか使わないし) ので、名前が非常に長くなってるんだよな。やっつけで作って、後で後悔した例の一つ。

ちなみに、Chatzillaは、初期Mozillaクライアント(現SeaMonkeyね)ではデフォルトで含まれていたので、Chatzillaの都合でいろいろ変えられたんだよ。

2009-11-08

Firefox Developers Conference 2009

皆様お疲れ様でした。来ていただいた方々はありがとうございます。なおプレゼン資料は後でアップします。Mozilla Japanのところかココかどこか

個人的にはライトニングトークは非常に面白かった。各々の発表者のネタの面白かったこととキャラが立ちすぎ。特にぼかろFx (これは頭から離れない) とかtwitter+ (ハッシュタグで全員フォローって個人的にツボ) のプレゼンはインパクト強すぎたなと。

Weather Japanのアクセスが増える原因は天候の悪化ってのもなるほどだよね。Chromeネタもいくつかあったけど、どれもシャレが効いてて面白かった。goo辞書は今度から使います。便利っすね。

次はどこかで話す機会もあるかとは思いますが (次はちょっと真面目ところでの講演なので、「文字コード変換に使うときに使うInterfaceがnsIScriptableUnicodeConverterという長い名前ですみません、やらかしたのオレです。だって、適当にChatzillaのコード直そうと思ったときに、、、」ってことは言いません)、その際にはよろしくお願いします。

あと、Twitterのアカウント間違ってました。@makoto_katoです。

2009-10-31

違和感

やったこともない場所のトラブル(違う言い方すればバグなんだけど) をアサインされて、どうにかせい!って言われて、数GBを平気で超えるソースコード見ながら理解して、一日でRoot Cause+Workaroundについて顧客にミーティングで説明したり、その合間に修正コード作ったりしてた自分にとっては(もちろんそれは仕事での話)、オープンソースカンファレンスのLTでOpenOffice.orgのコミュニティの人の話は全然ダメ。自分を高めたいんだったら、OSSじゃなくて、レベルの高い人たちのいる一流企業(MicrosoftとかGoogleとかAppleのHQ)で働いた方が、自分を高められると思うよ。マジで。

OSSには自分の方が良いコードを書いたとしても、それを納得させる努力ってのが結構必要で、それは企業でコードを書くよりもより重要なんだ。コードを書くだけじゃなくて、妥協点を考えることをより考えされられる。もちろん、そういう交渉ごとに対して、自分を高めているということであれば、別にいいけど。

OSSに携わる理由ってそういうことじゃないと思うんだよね。自分自身は開発者だから違うのかもしれないけど。

自分は欲しい機能があったり、使えないと思うバグが合ったから修正コードを投げつけたところから始まったんだけど、誰かがコードの読み方を教えてくれた訳でもないんだよね。デバッガで動きを理解すれば別に大体の動きは把握できるから。

そもそも、このソフトウェアいいんだけど、こういう機能がないから使えねーとか、何だよこのショボイバグとか思ったときに、直してやるかと思うかどうかだと思うんだけどね、開発者の本質っていうか、オープンソース的なものって。そこからコアの部分のコードを再実装したりしていくようになっていくと。レベルの高い人たちとやることが目的じゃなくて、ただ単にこのソフト使ってて、納得いかないから直している・実装するのがOSSだろ。こういう考えの自分だから、彼らのプレゼンが残念。すごい違和感のある内容だった。

OpenOffice.orgがやらないといけないことは、コミュニティを増やすということとかじゃなくて、まずOpenOffice.orgがMicrosoft Officeに勝っている部分を増やすこと。フリーとか無料とかじゃないとついて来ないようじゃ、一生勝てないし資金も集まらない。(前の会社で社長に「OSSで失敗するものは、劣化版コピーもの」っていう話をしたっけ。OSSでより使われるものは、シェアが勝る(or プロプラ)ものに比べても、劣化版コピーじゃないしね)。

最後に、日本語翻訳系プロジェクトが分散するのはいいけど、どのソフトウェアも語彙とかのために合同ミーティングとかカンファレンスした方がよくね?(って先週だれかに話した記憶が。。。)

2009-10-22

ThudnerbirdのGlobal full-text searchの実装の補足

ThunderbirdのGlobal full-text searchの実装において、補足しておく。

U+2000以下の文字についてはそのままなので、U+0100移行の文字はスペースがワードブレーカーになっている作りになっている。だから、検索で問題となるのはタイ語のみ(CJKと同じでワードブレーカーがスペースではないはずだったような。3.1までにちょっとタイ語勉強してくる)で、それ以外は網羅できてるはずです。ただ、U+0100未満の文字については、porterによる正規化ができているので、検索精度が高くなっている作りです。ここらはテストを細かくできてないというのが実情なので、問題があれば、バグをファイルしてもらえると助かります。

で、bi-gramを使っているけど、1文字で検索しても、検索結果が引っかかるようにしています。コードを見れば分かるけど、1文字の場合はワイルドカードを使うように強制変更してます。

ちなみに、データベースのスキーマを変更したら、データベース自体のバージョンをあげるようにしているため、beta 4のユーザーがnightlyやRC1にアップグレードすれば、何も作業なしに日本語の全文検索ができるようになります(データベースの再作成が行われるため)。僕の作ったtry server buildを使っている場合はデータベースを削除してもらったほうがいいです。

Mozilla Japanへ遊びに行ったら、瀧田さんに「どうにかならないの?」とか、dynamisさんに、「やってよ!」って言われたとか、とどめに、Mozilla Fluxでいろいろ書かれたからというのが、今回の実装をやり始めた理由なので、感謝は私にいうより、煽った人たちに言ってください。

OSSの開発プロセス上、開発者が興味のあるところが開発が進むことが多いので、ユーザー側が声を大にして言ってくれたほうが、本当の問題点が見つかりやすいとは思う。だから、これからも何かやって欲しいことがあれば、いろいろ言ってください。よろしく

2009-10-21

Thunderbirdの日本語検索が入りました

Global full-text search周りやっているAndrewがアナウンスしてるけど、一応チェックインされました。たぶん、明日くらいのNightly Buildから使えるはずです。

フィードバックを聞いているものはもうすでに直してありますが、何かバグを見つけたら、報告してください。bugzilla.mozilla.orgがベストですが、Twitterで@makoto_katoに文句垂れるなり、直接メールくれてもいいです。

ゆらぎとかはサポートしてないので、それは許してください。今後どうするか考えます。というか、辞書持つのってのはちょっとなぁと思うけど、ゆらぎを正規化するライブラリを書いた方がいいかもね。

2009-10-18

Firefoxのプラグインブラックリストがちゃんと動き始めたようだが

Mozilla、Microsoft製Firefoxアドオンを無効化

個人的にはやっとという感じだなぁと。ブラウザでネイティブコードが動く以上、ホワイトリストとブラックリストってのは、実装されるべきだから。

他のブラウザでも、Internet Explorerだって、KillBitというのがあって、セキュリティ問題のあったActiveXコントロールは、このKillBitで無効化される(他社製であっても)。各ActiveXコントロールがCLSIDを持っているので、そのCLSIDをブラックリスト(KillBit)に追加するというだけのこと。たまにWindows Updateで配信されているのは、そのリストを追加するだけのもの。

で、問題を修正した場合、そのActiveXコントロールが新しいCLSIDを使えば、それはKillBitに入ってないので問題なく動作する。また、アプリケーション側は直にCLSIDを使わずにProgIDという別名を使っておけば、アプリケーションを再コンパイルすることもないし。

そもそも、プラグインの実行する場所にサンドボックスがあったとしても、それが逆にプラグインの動作に対して制限を加えることになるし、セキュアなプラグイン環境を作るためには、別のバイトコードで実装する方向にいくんだろうな。。。return of the javaじゃないけど、JavaScriptで実装できるとか。

2009-10-16

Thunderbird 3の添付ファイル忘れ防止用の機能

Glodaの日本語対応はレビューパスしてないけど、それはおいておいて、Thunderbird 3では添付ファイル忘れ防止用の機能が入ってたんだということを最近知った。詳細は、http://level.s69.xrea.com/mozilla/index.cgi?id=20090802_Tb3_attachmentに譲るとして、Beta4での日本語通らないから直してといわれたので、見てみた。

簡単に原因を説明すると、\bの正規表現がどう動くかというところがポイントで、日本語の文字列だと\bが思ったように動作しないので、日本語通らなかっただけだった。ので簡単に修正コード書いてもうCheck-inしたので正式版までに直るはず。

まあ、KanjiをKanajiと書き間違えたり、unit testがないとか言わないで。というか、Attachment Checker自体にTestコードが一切ないんですが。つめるんだったら、そっちだろうって。

Firefox Developer Conference 2009で話します

発表者のトコロについた肩書きが最近できたのだけど(なんだ、テクニカル・アドバイザって)、Firefox Developer Conference 2009でGecko 1.9.2 (Firefox 3.6) で使えるjs-ctypesの話をします。懇親会でタダメシ食えるから来てというわけでないですが、興味があればどうぞ。

Azaはここ以外にもK...にも出るけど、Blizzardが日本で話すのは初めてじゃなかったかなあ。彼は元RedHatでMozillaをやってた人で今はMoCoでエバンジェリストやってる人なんで、いろいろ聞けると思います。

2009-10-15

Qt 4.6 beta 1

このペースでいって、Avkon(S60のUIフレームワーク)を捨てられるクオリティまで持って行くことができるのだろうかという点が、Symbianの生きる道だろうな

AndoridにXULRunnerが移植できるのかどうか

最近Mozillaでコソコソ技術的な検証が行われてて、技術的な調査が行われている。ちょっと昔にAndroidのブラウザを調べた時にある程度技術的な見解を持っているので、覚えている範囲で書いてみる。

グラフィックエンジン自体は、OpenGL直叩きまたは、Skia経由での描画でいけるので、これはC/C++のインターフェイスを持っているから、楽勝。というか、VladがSkia<->Cairoのバックエンド書いてたから、そんなに心配することない。gfxはまだ楽なわけだ。

問題は、ウィジェットコード。結局C/C++だけでの実装は無理というのが結論。WebKitのコードを見てたところ、JNIを使って、ActivityなどのDalvikのクラスを呼びだして、OSのWidgetにアクセスしてる。で、アプリケーションのラウンチャーもJavaで書かないといけないので、ラッパー用のアプリを書いて、それから、JNIで実装したクラスを呼び出す感じじゃないといけない。だから、面倒くさいんだよね。OSのサービスが基本的にDalvikに閉じてしまうので、そこをどうにかしないといけなくて。。。

っていうか、Vladさすが。正解。

2009-10-13

Maemo 5のWebブラウザ

N900に入っているWebブラウザは、Geckoベースなのだけど、NokiaのデモがYouTubeに残ってる。これ見てると欲しくなるなぁ、N900。プロセッサはOMAP3 with PowerVRだったから、SnapDragonよりも若干劣るけど、NetWalkerに採用されているi.MX51とはほぼ同等くらいの速度でこれ。

Maemo 6からは、Qtベースになるとアナウンスがあったんだけど、Webブラウザどうするのだろうね?

2009-10-12

自分のBio

とある場所でBioを書いてって言われたので、整理がてらに自分のPCの経歴を適当に書いてみる。 まともに書いたものはどこかに使われるかも。

小学生の時、PC-6601(しゃべる&歌うヤツ)を買って貰って、BASICをちょっとやってたんだけど、すぐ飽きてZ80のアセンブラに手を出す。ハンドアセンブルやるのがウザかったので、自作アセンブラ書いてた。その後、そのパソコン取り上げられたので、パソコンから離れる。PC-6601は大人になってからヤフオクでゲットし直した。しかもPC-6001シリーズ全部コンプし直す荒技。

某S大学在学中にLinux 1.2.8をさわり出す。当然1.3.xツリーを試そうということになるんだけど、もうトラブルだらけなんで、コードを触り出す。

一方その頃、Netscape Navigator 1.xが世の中で動いてて、Solaris 2.x(だったはず)でインターネットを体験。しかし、学校のネットワーク回線は昼間は遅すぎ。そのおかげで、夕方しか学校(研究室)に現れず(昼間・夜間はバイトとか飲みしまくり)。夜はソースコードダウンロードしまくってた。

その後、Javaがリリース。Javaのコード動かして遊ぶ遊ぶ。ついでに、Netscape Navigator 2.0が出てきて、もうウキウキ状態。なんか、世の中で革命が起きているってのはあの頃感じたよね!

大学卒業して、とあるSI企業(現在は買収されて跡形もない)に就職。その頃Netscapeのコードが公開される。とりあえずビルドしてみて、動かしてみたけど、これ、ビミョーじゃね?と思う一方、自分の環境用のウィンドウマネージャにAfterStepを使ってて、これがバグバグなので、直しまくる&パッチを送りつける。そうこうしてたらメンテナーになってた。それ以外にもLinuxとかいろいろOSSに手を出しまくり&パッチ投げつけ。やること見境なし。いろんなところのchangelogに名前残ってたり。まぁ、仕事には一切関係ないことだったけど。

また学生自体にバイトしてたころよりも収入減+車(田舎だったんで、ないと死ぬ)の借金で金がなかったので、Webアプリ書きのバイトをほそぼそとやる。そこで、いろんな言語で覚える。この話は経歴書には書かないけど。

一方、MozillaもNetscape Navigator 5のコードが捨てられ、Geckoベースになったんだけど、良い感じにバグバグすぎるので、しょうがないのでパッチを書き始めた。その頃コード書いてた日本人は、ボランティアで自分一人、あとはNetscapeの堀田さんとSunの田島さん(後から片貝さん)で、堀田さんと台湾人(だったよね)のFrankでと私でいろんなI18Nバグを直してた。いろいろとあって、みんなMozilla/AOLを離れた後は、GoogleとかYahoo!行ったみたいだけど

一方日本でOracleのセミナールームでMozilla Party.jp 1.0やるからプレゼンやってと言われたので、簡単なアーキテクチャのプレゼンやる。その頃にNetscpaeのI18Nメンバからいい加減にコミットの権限取ってって言われたので、Netscapeへ書類を送ってCVSの権限取得。バグを見つけて、自分で直しての繰り返し状態。

金稼いで来ても全く評価されない会社に見限って、知り合いのツテで某社に転職。そのおかげで徐々にOSSから離れる(超プロプラなところね)。ただ、気づいたら(いろんな事情があって)、そこの会社でもブラウザやることに。ブラウザも片手間のはずが、もろ100%その仕事だけになってしまう。日本で自分一人だけだったからなぁ、ちゃんとコード直してた人の数。いろんなトラブルで徹夜でデバッグ&修正コード書いたっけ。

そういう状態だから、LinuxのツリーとかMozillaとかに行方不明と載る(すごく後でそういうことになっているというのを知った)。それはそれで面白い状態。

いろいろと考えることがあって、その会社を退職して(最後のロールが、まさか一回り歳が上のエクセレントなエンジニアたちをマネージする管理職の立場になるとは入社するときには思いもしなかった <- それが直接の辞める理由じゃないんだけど)、数ヶ月遊んだあげく、とある企業に入社。(詳しくは絶対書かないけど)安易に会社を選んで後悔するはめに。

なので、Mozillaにもちゃんと戻ってくる。CVSのパーミッション残ったままだった。でも、昔々に自分でバグをファイルしたものが残ってるのが多数発掘されるので、ちびちびバグつぶしとか。表舞台には出てこないので、Mozilla関係者にも面識が割れてない状態だから、イベント行っても、誰も気づかない面白い状態。ウケる。

いろいろとあって、そこも退職。最後に2階級特進させるから残ってと言われたけど、それ殉職しろって言ってる?

それでまさかの再度プー。ほそぼそと転職先を探してたんだけど、エージェントの持っているものは面白さがかけるんで、個人事業主で、某所でパートタイムで働き始める。

それが今現在。見境ないなぁ

2009-10-06

日本語文書の読みやすさって

テストでGoogle Chromeを使ったときに、ページを見てて違和感があったので、そのメモ。

まずは、Google Chrome 3でのスクリーンショット(サンプルはこれを抜き出している)

なんか、ごちゃごちゃした感じになって、文字が読みづらい感じなんだよね。ってのが感想。

で、次にFirefox 3.5。

そうか、行間か!。CSSで指定してない場合の行間の高さの考えが違うんだと。

Chromeのときに1ドットだったので、WebKitの行間の考え方がおかしい?ってことなのかと思い、Safari 4での行間。

Safariだと読みやすい形で行間が空いている。Chromeの問題か。Googleの中の人たちももう少し日本語を考えてほしいなと。

ほかのブラウザだとどうなのよってことで、Internet Explorer 8ではどうよ。

さすが。日本語のノウハウ持ってるMicrosoftとAppleはちゃんとしてくるよね。

最後にOpera。

予想通りっていうか、そうだろうな。。。

2009-10-02

ThunderbirdのTry Server

GlodaBarの検索対応のパッチを書いていてるため、ThunderbirdのTry Serverのアクセス権をもらった。

基本的には、ここに書いているやり方で問題ない。
https://wiki.mozilla.org/Thunderbird/Infrastructure/TryServer

Mozilla-centralのTry ServerのようにWeb or Mercurial Queueということではなくて、クライアント証明書での認証を使ったWebインターフェイスのみ。

Thunderbirdについてはこれしか3.0で間に合わないけど、3.1で直してほしいものや作ってほしいものがある人は、直接メール (m_kato at ga2.so-net.ne.jp) してくれるか、Twitter (@makoto_kato) でつぶやいてもらうか、Bugzilla に私のメールアカウントをCCに突っ込んでおいてください。よろしく

2009-09-15

CJK Indexing

Mozilla Fluxが変な煽り(ネガティブな意味じゃないです)と某所で相談されたので、sqlite3のコードを見ながら実装を考えた。そのときのメモ。

現在のsqlite3の場合、サーチインデックス自体は、FTS3と呼ばれるモジュール構造を使って実装することが可能で、これは検索ワード用の別のテーブルを作ることでインデックスを実現している。

で、AndroidとかMacOS XのSpotlightとかだと、libicuというIBMの作った多言語ライブラリを使っている。これは、WebKitでも使っているので、WebKitベースのブラウザだとこれを使うことでの(コードサイズやメモリ使用量的な)コストはないに等しい。そのため、libicuは使うことにはWebKit的にはネガティブにはならない。

ただ、これがGeckoだと話が別。

外部のOSSのコードを持ってくるとき、Mozillaなやり方だとスタティックリンクで持ってくるのが普通なんだけど、これは非常にコードサイズを増加させてしまう。なので、libicuをそのまま使うということはよくない。

ただ、MacOSの場合は、OSでlibicuを持っているので動的にロードして使うことで、メモリ使用量の増加はたかが知れている。Linuxだと環境に依存する(この場合はある意味無視したほうがいいけどね)。Windowsだとこのライブラリを持ってないため、コスト面で不利。なので、libicuを使うことは諦めた。storage周りやっているShawnもlibicu使うことは否定的だしね。

また、Windowsだと、Indexing Serviceのワードブレーカーを使うコードを試したところ、速度面は問題ないのだけどブレーカーの精度の部分で納得いかず保留。それにプラットフォームでいろいろ変更するのは、Mozillaらしくない。

なので、porter+CJKのみbi-gramという方式で実装してみたところ、自分のメール環境で1.5倍のデータベースサイズの増加 (今まではCJKはブレイクなし) + 速度 (Althon64 X2 2.2GHz <- メイン開発環境)も問題を感じないので、それでテストパッチを作成してみた。

今の時期だと正直微妙なので、拡張でも対応可能なレベルで作っているというのが、今回の最大のポイント。

ちなみにMeCabとか使うのは却下。中国語の辞書ってどうするのよ。

2009-09-04

T-01Aの加速度センサーの実装をつくった

とある場所で、T-01Aを使う機会があったので、ついでに加速度センサーの機能をMozillaに実装してみた。

使い方は、ファイルしたバグに貼り付けたソースコードを見てくれればわかるが、TSRegisterAcceleration() でハンドルを持ってきて、TSGetAcceleration() で値を取得、TSDeregisterAcceleration() でハンドルを破棄するだけ。C# での使い方の場合は、http://smartmobidevice.blogspot.com/2009/08/toshiba-tg01-and-accelerometer.htmlに情報が載っているので、それを見てください。

Webブラウザが加速度センサーの情報を取得できるとくだらないことがもっと出来そうで、面白いよね。Dougの作ったボールのサンプルなんて、すごくショボいのに面白すぎて、10分くらい遊んでしまった。

それにしても、ガジェットとしての出来はT-01Aは相当良い。2台目需要としては、相当イイトコロ行っている。悔やまれるのは、OSがWindows Mobile 6.1だってことかなぁ。これで相当な減点材料。あと、この端末を触るまでSnapdragonには懐疑的だったけど、このチップ速すぎ。

2009-08-24

tracemonkeyのデバッグ方法が変わっていた

tracemonkeyを最近いじることがなかったんだけど、久々に触ってみたところ、デバッグ方法が変更になってた。

従来は、

TRACEMONKEY=verbose

と環境変数を設定すればよかったんだけど、今は、TMFLAGSにいろいろ設定するらしい。例えば、こんな感じ。

TMFLAGS=liveness,assembly

で、このように設定すると、

js> var a = 0; for(i=0;i<100;i++) a=a+i;

nanojitは、LIRのコードを生成するので、以下のログを吐く

================================================================================
=== BEGIN LIR::compile(000000000054A470, 0000000000561FC0)
===

=== Results of liveness analysis:
===
  Live instruction count 33, total 53, max pressure 7
  Side exits 1
  Showing LIR instructions with live-after variables

  state = iparam 0 rcx           state
  sp = ldq state[0]              state sp
  rp = ldq state[8]              state sp rp
  cx = ldq state[16]             cx state sp
  eos = ldq state[24]            cx eos state sp
  eor = ldq state[32]            cx eor state sp
  ld1 = ld cx[0]                 cx state ld1 sp
  ld2 = ld state[816]            cx state ld2 sp
  sti sp[0] = ld2                cx state ld2 sp
  ldq1 = ldq cx[296]             cx ldq1 state ld2 sp
  ldq2 = ldq ldq1[120]           cx ldq2 state ld2 sp
  map = ldq ldq2[0]              cx state map ld2 sp
  ld3 = ld state[824]            cx state ld2 sp ld3
  sti sp[8] = ld3                cx state ld2 sp ld3
  add1 = add ld2, ld3            cx add1 state sp ld3
  sti sp[0] = add1               cx add1 state sp ld3
  sti state[816] = add1          cx add1 state sp ld3
  js_BoxInt32_1 = call #js_BoxInt32 ( cx add1 )
                                 cx add1 state sp ld3 js_BoxInt32_1
  ldq3 = ldq cx[296]             cx add1 state sp ld3 ldq3 js_BoxInt32_1
  sti ldq3[96] = js_BoxInt32_1
                                 cx add1 state sp ld3
  ldq4 = ldq cx[296]             cx add1 ldq4 state sp ld3
  ldq5 = ldq ldq4[120]           cx add1 ldq5 state sp ld3
  map = ldq ldq5[0]              cx add1 state map sp ld3
  add2 = add ld3, 1              add2 cx add1 state sp
  sti state[824] = add2          add2 cx add1 state sp
  ldq6 = ldq cx[296]             add2 add1 state ldq6 sp
  ldq7 = ldq ldq6[120]           add2 add1 state sp ldq7
  map = ldq ldq7[0]              add2 add1 state sp map
  sti sp[0] = add2               add2 add1 state sp
  sti sp[8] = 100                add2 add1 state
  sti state[816] = add1          add2 state
  sti state[824] = add2          state
  loop                           state

=== Translating LIR fragments into assembly:
=== -- Compile trunk 0000000000561FC0: begin
=== -- Compile trunk 0000000000561FC0: end

その後、ネイティブコードを生成。これもログを生成するように指定するので、

=== Aggregated assembly output: BEGIN
===
  000023ff29   [prologue]
  000023ff29    55
  000023ff2a    48 8b ec
  000023ff2d   [patch entry]
  000023ff2d    48 83 ec 30
  ## patching branch at 000023ffd6 to 000023ff31
  000023ff31:
  ## compiling trunk 0000000000561FC0
      state = iparam 0 rcx
      sp = ldq state[0]
      rp = ldq state[8]
      cx = ldq state[16]
      eos = ldq state[24]
      eor = ldq state[32]
      ld1 = ld cx[0]
      0
      eq2 = eq ld1, 0
      eq2 = eq ld1, 0
      xf2: xf eq2 -> pc=000000000049BEAB imacpc=0000000000000000 sp+0 rp+0
  000023ff31    48 89 4d f0           rcx(state)
  000023ff35    48 8b f1              rcx(state)
  000023ff38    48 8b 7e 00           rsi(state)
  000023ff3c    48 8b 4e 10           rsi(state) rdi(sp)
  000023ff40    8b 59 00              rcx(cx) rsi(state) rdi(sp)
  000023ff43    83 fb 00              rcx(cx) rbx(ld1) rsi(state) rdi(sp)
  000023ff46    0f 85 4d 00 02 00     rcx(cx) rsi(state) rdi(sp)
  ----------------------------------- ## BEGIN exit block (LIR_xt|LIR_xf)
  000025ff99:
  ## merging registers (intersect) with existing edge
  000025ff99    8b 4d f0
  000025ff9c    b8
  000025ffa1    48 8b e5
  000025ffa4    e9 32 00 fe ff
  ----------------------------------- ## END exit block 000000000054C8A8
      ld2 = ld state[816]
      $global0 = i2f ld2
      sti sp[0] = ld2
      ldq1 = ldq cx[296]
      ldq2 = ldq ldq1[120]
      map = ldq ldq2[0]
      ld3 = ld state[824]
      $global1 = i2f ld3
      sti sp[8] = ld3
      add1 = add ld2, ld3
      ov2 = ov add1
      ov2 = ov add1
      xt3: xt ov2 -> pc=000000000049BEB2 imacpc=0000000000000000 sp+16 rp+0
  000023ff4c    8b 96 30 03 00 00     rcx(cx) rsi(state) rdi(sp)
  000023ff52    89 57 00              rcx(cx) rdx(ld2) rsi(state) rdi(sp)
  000023ff55    8b 9e 38 03 00 00     rcx(cx) rdx(ld2) rsi(state) rdi(sp)
  000023ff5b    89 5f 08              rcx(cx) rdx(ld2) rbx(ld3) rsi(state) rdi(sp)
  000023ff5e    03 d3                 rcx(cx) rdx(ld2) rbx(ld3) rsi(state) rdi(sp)
  000023ff60    0f 80 43 00 02 00     rcx(cx) rdx(add1) rbx(ld3) rsi(state) rdi(sp)
  ----------------------------------- ## BEGIN exit block (LIR_xt|LIR_xf)
  000025ffa9:
  ## merging registers (intersect) with existing edge
  000025ffa9    8b 4d f0
  000025ffac    b8
  000025ffb1    48 8b e5
  000025ffb4    e9 22 00 fe ff
  ----------------------------------- ## END exit block 000000000054CA68
      i2f2 = i2f add1
      sti sp[0] = add1
      sti state[816] = add1
      js_BoxInt32_1 = call #js_BoxInt32 ( cx add1 )
      JSVAL_ERROR_COOKIE
      eq1 = eq js_BoxInt32_1, JSVAL_ERROR_COOKIE
      eq1 = eq js_BoxInt32_1, JSVAL_ERROR_COOKIE
      xt2: xt eq1 -> pc=000000000049BEB6 imacpc=0000000000000000 sp+8 rp+0
  000023ff66    89 57 00              rcx(cx) rdx(add1) rbx(ld3) rsi(state) rdi(sp)
  000023ff69    89 96 30 03 00 00     rcx(cx) rdx(add1) rbx(ld3) rsi(state) rdi(sp)
  000023ff6f    4c 8b e6              rcx(cx) rdx(add1) rbx(ld3) rsi(state) rdi(sp)
  000023ff72    48 8b f2              rcx(cx) rdx(add1) rbx(ld3) rdi(sp) r12(state)
  000023ff75    48 63 d2              rcx(cx) rbx(ld3) rsi(add1) rdi(sp) r12(state)
  000023ff78    4c 8b f1              rcx(cx) rbx(ld3) rsi(add1) rdi(sp) r12(state)
  000023ff7b    48 63 c9              rbx(ld3) rsi(add1) rdi(sp) r12(state) r14(cx)
  000023ff7e    48 b8                 rbx(ld3) rsi(add1) rdi(sp) r12(state) r14(cx)
  000023ff88    ff d0                 rbx(ld3) rsi(add1) rdi(sp) r12(state) r14(cx)
          000000000023FF8A:
  000023ff8a    49 8b cc              rbx(ld3) rsi(add1) rdi(sp) r12(state) r14(cx)
  000023ff8d    4c 8b e0              rax(js_BoxInt32_1) rcx(state) rbx(ld3) rsi(add1) rdi(sp) r14(cx)
  000023ff90    41 83 fc 10           rcx(state) rbx(ld3) rsi(add1) rdi(sp) r12(js_BoxInt32_1) r14(cx)
  000023ff94    0f 84 1f 00 02 00     rcx(state) rbx(ld3) rsi(add1) rdi(sp) r12(js_BoxInt32_1) r14(cx)
  ----------------------------------- ## BEGIN exit block (LIR_xt|LIR_xf)
  000025ffb9:
  000025ffb9    b8
  000025ffbe    48 8b e5
  000025ffc1    e9 15 00 fe ff
  ----------------------------------- ## END exit block 000000000054CBC8
      ldq3 = ldq cx[296]
      sti ldq3[96] = js_BoxInt32_1
      ldq4 = ldq cx[296]
      ldq5 = ldq ldq4[120]
      map = ldq ldq5[0]
      #3FF00000:0 /* 1 */
      1
      add2 = add ld3, 1
      ov1 = ov add2
      ov1 = ov add2
      xt1: xt ov1 -> pc=000000000049BEB7 imacpc=0000000000000000 sp+0 rp+0
  000023ff9a    4d 8b ae 28 01 00 00  rcx(state) rbx(ld3) rsi(add1) rdi(sp) r12(js_BoxInt32_1) r14(cx)
  000023ffa1    45 89 65 60           rcx(state) rbx(ld3) rsi(add1) rdi(sp) r12(js_BoxInt32_1) r13(ldq3)
  000023ffa5    83 c3 01              rcx(state) rbx(ld3) rsi(add1) rdi(sp)
  000023ffa8    0f 80 18 00 02 00     rcx(state) rbx(add2) rsi(add1) rdi(sp)
  ----------------------------------- ## BEGIN exit block (LIR_xt|LIR_xf)
  000025ffc6:
  000025ffc6    b8
  000025ffcb    48 8b e5
  000025ffce    e9 08 00 fe ff
  ----------------------------------- ## END exit block 000000000054CD50
      i2f1 = i2f add2
      sti state[824] = add2
      ldq6 = ldq cx[296]
      ldq7 = ldq ldq6[120]
      map = ldq ldq7[0]
      sti sp[0] = add2
      #40590000:0 /* 100 */
      100
      sti sp[8] = 100
      lt1 = lt add2, 100
      lt1 = lt add2, 100
      xf1: xf lt1 -> pc=000000000049BEC0 imacpc=0000000000000000 sp+16 rp+0
  000023ffae    89 99 38 03 00 00     rcx(state) rbx(add2) rsi(add1) rdi(sp)
  000023ffb4    89 5f 00              rcx(state) rbx(add2) rsi(add1) rdi(sp)
  000023ffb7    41 bc                 rcx(state) rbx(add2) rsi(add1) rdi(sp)
  000023ffbd    44 89 67 08           rcx(state) rbx(add2) rsi(add1) rdi(sp) r12(100)
  000023ffc1    83 fb 64              rcx(state) rbx(add2) rsi(add1)
  000023ffc4    0f 8d 09 00 02 00     rcx(state) rbx(add2) rsi(add1)
  ----------------------------------- ## BEGIN exit block (LIR_xt|LIR_xf)
  000025ffd3:
  000025ffd3    b8
  000025ffd8    48 8b e5
  000025ffdb    e9 fb ff fd ff
  ----------------------------------- ## END exit block 000000000054CF20
      sti state[816] = add1
      sti state[824] = add2
      1
      loop
  000023ffca    89 b1 30 03 00 00     rcx(state) rbx(add2) rsi(add1)
  000023ffd0    89 99 38 03 00 00     rcx(state) rbx(add2)
  000023ffd6    e9 00 00 00 00
  000023ffdb   [epilogue]
  000023ffdb    48 8b e5
  000023ffde    5d
                c3
===
=== Aggregated assembly output: END

===
=== END LIR::compile(000000000054A470, 0000000000561FC0)
===============================================================================

細かく出力条件を設定できるようになっているのは、いい感じ。

2009-08-19

総務省が絡むとろくなことがない

約2年前に総務省が各キャリアに対して、販売奨励金の改善を提言していたけど、その結果、

NTTドコモ2008年度増益
KDDI2008年度増益
ソフトバンク2008年度増益

キャリア側だけが得をする結果になってしまっている。一方端末メーカーは撤退報道がいろいろ出るなど、結果論から言えば、総務省の指導でキャリア側だけが儲かる仕組みになってしまった。

販売奨励金というシステムなんて、今では海外でもいろいろ導入されているシステムで、日本だけのビジネスモデルではない。海外だと24ヶ月の契約でSIMロックされた携帯電話 (SIMフリーな端末という場合もある) が安く買える (内部で販売奨励金が発生しているため)。もちろん、そういう買い方でのみ携帯電話を買うことが可能ということではなくて、端末メーカーが販売しているSIMフリー端末を買うことも可能。これは、電波の形式はGSM/W-CDMA、メールはSMS (MMS)、データ通信を行う場合はGPRSでという、携帯電話のネットワークの構成が標準に準じているために、キャリアが独自のサービスを展開しづらい状況になっているからだ。そのため、端末メーカー側が主導権を握っているため、販売奨励金のようなシステムが有効に活用される。

では、日本だとどうか。

そもそもキャリアの都合に合せて端末メーカーが携帯電話端末を作っているのが日本のモデル。そのため、キャリアの (新規サービスの) 都合で端末の開発コストは上がっている。それなのに、販売奨励金というシステムに手を入れてしまったため、端末の販売台数が下がるのは誰の目でも明らか。もちろん端末の利幅は小さいため、それで開発コストを賄えるかといえば、賄えないので撤退するのは当然だろう。販売奨励金に手を出したのは、総務省の愚作でしかない。

販売奨励金なんてシステムに手を入れるのではなくて、

  • SIMカードのみの契約方法を作るように義務付けること
  • SIMフリー端末であっても各社の基本的なサービス (メール、データ通信) を受けられるように義務付ける
  • コンテンツ課金を別のキャリアの携帯電話でもできるような仕組みを義務づける
  • 中古市場を健全化するために、違法取得端末に対しての情報の提供をキャリアに義務付けること

なんてのをやっておけば、もう少し市場が面白くなったかもしれないとホントに思う。特に日本メーカーが海外で戦えないのは、端末がガラパゴスということではなくて、日本のキャリアのシステム (特にドコモ) がガラパゴスで、各社そこにリソースを入れていたことなんだ。

国が指導するとろくなことないよね。

2009-08-13

モバイルグラフィックスチップのまとめ

いい資料がなかったため、自分へのメモということで書いておく。

結局のところ、PowerVR vs ATI (Qualcomm) vs nVidiaという図で、デスクトップのグラフィックスチップとは違ってPowerVRというプレイヤーがいるということが違い。しかも製造には絡まないというARMと同じような戦略をとっている。

ちなみに、iPhone 3GSはPowerVR SGX。US15Wの環境でWindows Vista載せているPCがあるけど、それとグラフィックスチップが一緒(もちろんクロックとかが違うとは思うが)。

CPU / チップセット製造元チップ名称グラフィックスチップOpenGL ES
Freescalei.MX51ATI Z4302.0
IntelUS15W/US15LPowerVR SGX2.0
nVIDIATegraTegra2.0
QualcommMSM (MSM7500)ATI IMAGEON1.1
QualcommSnapdragonATI Z4302.0
TIOMAP2PowerVR MBX1.1
TIOMAP3PowerVR SGX2.0

2009-08-11

Firefox 3.6のリリース時期

3.5で長引いたのはnanojitが安定しなかったからで、現在のtrunkのバイナリは安定してるはず。だから、3.6のリリースが年内に行われて当然 (出なければ、リリースマネージメントの問題) だと思うよ。UIをどこまでイジるかによるけど。

3.5というか、1.9.1の場合のリリースが長引いたきっかけは、nanojit。そもそもnanojitがなければ、春にリリース出来ていたと思う。Mozillaとしてあれだけ人員を割いてバグ修正しまくったのにもかかわらず(というか、GoogleのV8チームとかAppleのNitroチームとかってどのくらい開発者をアサインしているのかが知りたい。V8なんて何年も寝かしたもの+そもそもHotSpot VM作ってた人だから経験値も高いから、Chrome 1.0の地点で安定してるのは理解できる)、あれだけ時間がかかった。JITエンジンという特性上、外部の開発者がコードを貢献するということはそんなに期待できないしね。(外部からのもので、最近面白いアイデアだと思っているのは、Bug 506182だけど。)。

今回はそんなに悲観的になることはないと思う。まぁ、3.6でどこが変わったの?って言われると、うーん。。。(内部はレガシーなところをなくしたり、いろいろ変わってるんだけどさぁ)

2009-08-02

liboggplay

最近GITツリーを同期してなかったので、久々に同期してみたら、Tracにファイルしておいた2件のパッチ(SSE2が動かない話と、Windows x64でのSSE2コード)をマージしてくれたようだ。Thanks, Viktor

というか、Mozillaに入ったおかげでliboggplayのコードがまともになっていっているんですが。。。メジャーなプロジェクトで使われると、コードがstableになっていくのが、OSSのよくある風景ですが。

2009-07-28

Chrome OS

全然イノベーションを感じないのだけど、Xを捨てられるということであれば、ある意味価値のあるものなのかもしれない。

ただ、結局のところ、VAIO Pとかに入っているLinuxを作っているようなベンダーとかを殺したりするだけというのが答えかなぁと。それといろんな会社のNetbookのデフォルトOSがUbuntuベースのものから、Chrome OSに変わるだけかもね。

そういうことになると、UbuntuがDELLからもらったお金がUbuntuに流れなくなってということもありうるので、Googleも本気にはやらないかもね。また、ここでChrome OSが転けると、やっぱりLinux Desktopがダメじゃんという風評もより強くなるので、どっちに転んでもネガティブなことになりそう。

良くない流れだねぇ。

2009-07-25

MozillaBuild 1.4

Windows環境でのtoolchainパッケージであるMozillaBuildが1.4にバージョンアップした。

Mercurialのバージョンがあがったとかもあるのだけど (1.3の頃はMercurialのバージョンが古かったので、別途アップデートしてた)、今回のポイントは、Windows x64環境での動作にハックがいらなくなったこと。ついでにMookが作ったx64ビルド用のバッチファイルも入っているはず。

っていうか、x64用のbuild configは、1.9.2に間に合わないので (Brendanがいろいろ仕事増やしてくれたため、その対処用のチェックが非常に多い)、1.9.3以降用になるとは思うけど。

2009-07-21

ITproのダメ記事

http://itpro.nikkeibp.co.jp/article/COLUMN/20090710/333508/y

この記事見て。このレベルの考えで部長って富士通どうよ。現場の人間でもない部長だからこういう発言なのか。

企業レベルでアップグレードするかどうかということを考える場合は、機能が増えたとかじゃなくて、End Of Life (セキュリティアップデートの終わり) を考えるべきというか、それが基準。Firefox 3の場合は、おそらく今年中にセキュリティアップデートの提供は終わる。そのため、企業でFirefoxを導入している場合で、セキュリティアップデートの提供を常に望む場合は End Of Lifeまでに移行するしかない。

もちろん、様々な理由でEnd Of Lifeを迎えても移行できない場合はある。例えば使っているシステムがFirefox 3.5で検証されていないとかね。その場合は、いろんな会社から出ているフィルタリングソフトウェアとかを導入するとかして、セキュリティを確保するしかない。

なので、そもそも機能が増えたからどうするとか考えるのはコンシュマー的であって、企業ユーザーがそんなことを検証するのは、システムのアップグレード時で十分だし、End Of Lifeの条件を考えてこないSIerのシステムなんて導入すべきじゃないと思うよ。

2009-07-20

Nokia 5800 Xpress Musicを買った

初S60 5th Edition端末。

N97が出たため、結構お安くゲットできる状態だったので買ってしまった。スペック (CPU/RAM) 的にはN97とほぼ同様なんだけど、どうもタッチパネルの感度がちょっと違うらしい。

以下感想

  • ブラウザとかのUIはなぞってスクロールさせる、タッチUI系では当然のUIなんだけど、なぜか、リストボックスとかメニューとかのように、スクロールバーが表示される場合は、スクロールバーを使ってスクロールさせないといけない。それはないでしょ、Nokiaさん
  • N82よりもWebブラウザの速度感は増している
  • 指でUIをいじるとどうも使いづらい。付属のペンを使って操作というのが、正しい使い方のようだ。って、どんなPocket PCだよって感じのダメさ加減
  • 少なくとも、フルブラウザを使うときの解像度は横320だと足りないよねって改めて痛感。5800のように640あると便利。
  • S60 5th EditionのSDKはC++もJavaも全部入りなのね。
  • gmailを入れて、そのUIに唖然

そんなとこ

2009-07-17

Firefox for Windows CE

Fennecじゃなくて、普通のWindows CE用のFirefoxをVladなどのmozilla.comの人たちがやっているらしく、それ用のバグとかがたくさん開かれている。

Windows Mobileというのは、素のWindows CEにWindows Mobile用のフューチャー(Phone機能とか)とシェルをかぶせたもので、今度出る6.5というのも、素のWindows CEに手を入れずに、ガワの部分 (Windows Mobile用のもの) だけいじったという別にアーキテクチャ的にはまったく面白くないもの。

で話がそれたんだけど、その素のWindows CE用のFirefoxが出る(8月末RC)みたいなんだが、インパクト的に弱いよね。まぁ、Canvas Browserでもないし、Windows CEはx86でも問題ないから、パフォーマンスの問題は少ないと思うけど。

日本語?。AC3フォントの件直さないと、無理かと。

2009-07-14

バッチ処理でPPTファイルをPDF化

ふと出来ないかなぁと思って調べてみたら、OpenOffice.orgを使えば以外に簡単にできるらしい。

まず、こんな感じに通信ソケットを開くようにOpenOffice.orgを起動しておく。

soffice "-accept=socket,host=localhost,port=2002;urp;"

その後、Pythonで外部コントロール

import uno
import unohelper

from com.sun.star.beans import PropertyValue

localContext = uno.getComponentContext()

# connect to the running ooo 
resolver = localContext.ServiceManager.createInstanceWithContext(
        "com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve(
        "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
smgr= ctx.ServiceManager
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
filepath = "/home/makoto/test.ppt"

ppt = desktop.loadComponentFromURL(
        unohelper.systemPathToFileUrl(filepath),
        "_blank",
        0,
        (),)

args = []
args1 = PropertyValue()
args1.Name = "FilterName"
args1.Value = "impress_pdf_Export"
args2 = PropertyValue()
args2.Name = "Pages"
args2.Value = "All";

args.append(args1)
args.append(args2)

url = "file:///home/makoto/test.pdf"
ppt.storeToURL(url, tuple(args))
ppt.close(True)

案外簡単

2009-07-11

モバイル用のフルブラウザ

Android (G1)に飽きてきたので、Nokia N82に自分のケータイを戻しているんだけど、ケータイ用のフルブラウザってインラインフレームを使われると、そのインラインフレーム上のスクロールバーをクリックできないものが多い。

Skyfire(こいつは、サーバーサイドのGeckoでレンダリングしてその描画データをクライアントに送っている。Opera MiniとかJigとかと同じやり方)でも同じことが起きてて、その点が非常に使いづらい。

まぁ、Androidのブラウザでも同じようにインラインフレームのスクロールバーをクリックすることができないんだけどね。

iPhoneは持ってないから、どうなっているのかわからないけど、何でモバイル用のフルブラウザというのはユーザビリティが欠けてるよね。作った人たちは、自分で使ってないだろとつくづく思う時がある。Dogfoodは大切だよ。

2009-07-05

予想通りの展開が来たわけだが。

After Nokia bought Qt-developer Trolltech, a lot of people where raising questions about the future of Maemo, as the mobile software uses GTK+ as central piece of its platform. Those people now seem to have gotten an answer: During a keynote at the Gran Canaria Desktop Summit Nokia's Quim Gil announced that a future release of Maemo is going to be built around Qt.
http://derstandard.at/fs/1246541386200/Maemo-switches-to-Qt

Nokia様がお買い上げになった時点で、Maemo(N800とかN810という型番で売られているNokiaのインターネットタブレットで使われているLinuxプラットフォーム)が、Qtに移行するだろうと予測されていた訳だが、予想通り発表になった。

すぐ移行というわけはなくて、Maemo 5 (おそらく、N97とほぼ同じ形状で発売されるインターネットタブレットと一緒にでてくるヤツ) は、まだGTKベースだけど、その将来のバージョン(おそらくOS2010)でGUIウィジェットがQtに変わるんじゃないかなぁと。

SymbianもSymbian^4とかのプランだとQtをWidgetの一つにもってくるという話もあるので、NokiaはQtに賭ける戦略になってきてるね。

2009-06-30

やっと動いた

JavaScript Shellがエミュレータ上でやっと動いた

XULRunnerのバイナリは生成はできているんだけど、まだ無理

2009-06-22

WindRiverのSymbian批判記事

Intelが組み込み本気にやるんだったら、どこかのLinuxベンダーに資本投下するなり、(MontaVistaかWindRiverを)買っちまうだろうと思ってたら、予想通り、WindRiverがIntel一味になったわけだけど、WindRiverの人が面白いポジショントークしてるのがウケた。

この記事は、Symbianのオープン化について、Symbianの立ち位置に対しての批判記事というかダメだし記事なんだけど、当然のことながら、Symbianからバッカじゃねーのという反論が書かれている。

はっきり言って、Symbianの言っていることのほうが正しいと思うけど、WindRiverってこんな糞マーケティングする会社だったっけ?Intelになったから?。

Nokiaが見捨てなければ、Symbianもまだ生き残れるとは思うけどね。あの独自のプログラミングモデルを吸収するレイヤーを最近リリースしてるし、Qt買うとかやってることは全うというか、自身の弱いところを埋める行動は納得いく。あとは、CodeSourceryに資本投下するなり、買っちまうと面白いよね。

こんな糞記事書いたWindRiverも日本法人はダメダメで有名なところ(MontaVistaの日本法人も同様)だったけど、WindRiverがIntel一味になることでもう少しマシになることを祈る。ただ、Intelはソフトウェアをやる(買収含む)と常にコケるという伝説の新たな一ページになるだけというのが答えのような気がしてならないけどね。

2009-06-17

Fennec for Windows Mobileの現状

なんか、Rockridgeさんは、MozillaのOfficialなコメントだけで物事言い過ぎなので、Mozillaとは関係ない私から雑感を言っておく。

個人的にいえば、今のままではありえんというのが答えかなぁと。中野さんが言うように実機で見れば、言いたいことがわかると思う。

なんか、この感じは僕がすごく関わってたころのGecko思い出すみたいな。

すくなくとも、現状のままだとNetscape 6とかの失敗を生かしていない。理想を求めるのは必要だけど、現実的な解というのはもっと必要で、理想を求めて失敗したソフトウェアなんて腐るほど見ている(ほとんどみんな知らないと思うけど、タリジェントとかね)。結局生き残るのは、現実的な解を使ってきたものだ。だから、来年リリースするとしても、ある程度は理想を捨てることも重要。その頃にコンシュマーに降りてくる端末も、ARMの1GHz-1.5GHzぐらいが限界だろうから。

現時点でWindows Mobile 6 (6.1)の端末でRAMが256MBつんでいる端末がどれだけあるのかと。128MBでもブートはできるとは思うけど、OOM Killerぽく、別のプロセスぶっ殺すことになるから、メールを書くときにブラウザ開いてなんてやると、もうダメ。そこまでしてまで不便さを求めても使いたいと思うのかと。

また、N810 (OMAP2だから、Touch ProのMSMのチップよりは劣るけど)ではある程度はまともに動くので、Windows CE側のAPIとしてのグラフィック周りが弱すぎなのかもね。Windows CEのCairoのバックエンドはDirectDraw使ってるんだけど、ビデオメモリへの直接アクセスができるのが利点だけ。Geckoとしてほしいのは、Compositeのアクセラレーションだ。だからビデオチップのパフォーマンスを生かせないから、なおさら遅くなると思う。Willcomの端末 (PXA使ってるやつ多し) だと、NEON持ってないからWireless MMXも使うべきだけどね (Willcom端末持ってればコード書いてたんだが、cairoのバックエンドとか)。

っていうか、去年Mobile Mondayのプレゼンで見たコンセプトだと面白い感じだったんだけど、なんで、こんなただの普通のフルブラウザになっちまってるの?ってのが、一番感じてることなんだが。

2009-06-13

Fennec開発合宿に行ってきた

現場ではまだ続いているんだけど(月曜日の朝まで)、金曜日、土曜日と開発合宿で伊東に行ってきた。

場所は開発合宿がよく行われる、山喜旅館で、日本でMozillaのコードを書いている人がほぼ勢揃いというか、日本にいる現在のアクティブなコミッター(Johnさん、中野さん、私)が全部そろっている豪華な布陣。

肝心のFennecの開発は、直前にmozilla-centralのツリーのチェックイン制限がなくなったためにコードが大量にチェックインされ、その内のヤバ目のもの(俗にfocus managerと呼んでるけど)のコードがregressionを起こしまくってるおかげでWindows Mobileでまともに動かなくなってたとか、タッチUIのバグを解析したりなど、いろいろガヤガヤとやってました。

それにしても、池添さんから聞いた衝撃の事実は、Fennecのブラウザのコンテンツ部分が、Canvasで書いてること。そりゃいろいろなバグが起きるというか、そのアーキテクチャでいいのか、Mozilla。ついでにこのUIはユーザビリティから考えてどうなのよとか、いろいろな議論とかもしてました。

なお、開発合宿というのは、今後Mozilla Japanでも定期的に行うかもしれないということなので、何かコードを書いてみたいだとか思っている人達は、是非次回からは応募してください。(参加してれば)私もいろいろ教えますよ。

2009-06-09

Google Dev Phone 2ゲット

パシフィコ横浜で今日行われたGoogle Developer Day 2009に行ってきたら、予想通りDev Phone (HTC Magic) を事前登録者のみにプレゼントしてた。UIは日本語版になってるってのがレア。やはり、日本語入力はiWnnなのね。

2009-06-05

Mobile Firefox 開発合宿??

Mozilla Japanのブログとかなんて全然見てなかったのだけど、Mobile Firefox 開発合宿というのが、来週あるらしい。他のイベントのとかは募集終了したら「募集終了しました」というコメントが残るみたいだけど、どうもこれは残ってないことからして、募集は続行しているってこと?

チェックイン時のテスト用にWindows Mobileのビルド環境というのは持ってたりするし、たまにはコミュニティ関連のイベントでも行こうかと思ってたので、どうしようかなぁと。ただ行けても金曜日くらいだけなんだが。というかコミット権を持っている人じゃない人を優先すべきかと思うので、申し込むとしても来週にする予定

まぁ、少なくとも各構造体とかクラスのアライメントを再度調整するだけでもメモリを少し稼げるし(それ用のバグファイルしなきゃなぁ)、Windows Mobileに限らずやることたくさんあるんだよね。。。

2009-06-02

WindowsではliboggplayはMMXしか使わない

調べてみたら、liboggplayでSSE2が有効になってないので、本家liboggplayのTracにバグをファイルしておいた。config_win32.hを直すのもいいんだけど、Visual C++の環境でATTRIBUTE_ALIGENMENT_MAXなんて定義使う必要もないし。

SSE2は、Pentium 4とCore 2以降 (Pentium Mは除外) またはPhenonm以降(AMDの場合)じゃないと、128ビットネイティブに演算できないから、CPUによって速度がまちまちなのが欠点。Google ChromeのYUV変換もMMX直書きだったし。

ちょっと話がそれるけど、そういえば、iDCT変換だってWindows上だとMMXは無効にしてあるんだよね、PGOでこけるからという理由で。そもそもPGOをそこだけ辞めるという選択肢があるとは思うんだけど、そこはRocと議論すべきかなぁ。

追記

Bug 496529としてMozilla側にもファイルしておいた。チェックイン制限が解除されれば直るでしょう。

2009-05-20

Android 1.5だとMMSがまともに動く

先日自分の持っているAndroid Dev Phone 1を1.5(cupcake)にアップグレードしてみた。起動画面が変わったり、ちょっとアイコンが変わってたり、WebKitのバージョンがあがっていたりするのだけど、個人的には、MMSがまともに動くようになってるのが一番大きい変更点というか一番大きい修正点。

実験する限り、1.1までのファームだと、MMSを設定したとしてもProxyの設定を反映してくれないので、SoftbankのMMSのメールを引き出せなかった。1.5へアップグレードしたところ、Proxy Serverの設定をちゃんと読み込むようになった。

詳しくない人に説明すると、Softbankのケータイ電話では、メールシステムにはMMSを採用している。これはi-modeのようなガラパゴスとは違って、ケータイ電話における世界標準のメールプロトコルの一つ(簡単に説明すると、世界中ではSMSが一般的に使われるんだけど、サイズが大きい場合はMMSを利用している。ちょっと違うけど)。

ただ、Softbankのイヤらしいところは、特定の地域以外では、Proxy ServerがUser-Agentなどのヘッダをチェックして、登録されていないものだと接続をはじくようになっている。そのためNokiaな人たちでは、メールを送受信するために、それ専用のProxy Server(YaPN)を作ったり、User-Agentを偽装するのが一般的だ(最近は絵文字のシステムまで移植する人たちも現れているけどね)。

なので、それを偽装できれば、AndroidであってもSoftbankのメールの送受信ができるわけだ。

Proxy Serverさえ作れば、こんな感じでメールの受信が可能になる。Dev Phone買った時に作っておいたものがあったので。

2009-05-14

V8のx64 JIT

久しぶりに、Chromeで使われているGoogleのJavaScriptエンジンである、V8のソースツリーを同期したらx64ネイティブのJITコードがコミットされてた。

けど、ビルドできないけどね。

ついでに、Mozillaのはどうなんったんだという話を追加しておくと、TraceMonkeyのx64コードはちょっと前に削除されたんだけど、reduxのツリーにあるx64コードを持ってくる予定らしい。ただ、reduxのツリーのものをそのまま持ってきても、ビルド通らないし、実装が1/3足りないので、実装し直す必要がある。patch branchとか。

2009-05-08

Core i7の64ビットでのパフォーマンス?

Core MA系だと、64ビットモードではMicro Fusion / Macro Fusionが動作しないけれど、Core i7だと動作するようになったようで、これがパフォーマンス向上の理由と言われていて、実際改善しているらしいのだが、実データを見たことがない。

Core i7のマシンがとあるところにあったため、rsaperfを利用して実データをとってみた。

rsaperfというのは、NSSに含まれるテストスイートの一つで指定した時間RSAの暗号化を行うベンチの一つだと思ってください。

データをとったのは、Core 2の1.86GHzとCore i7 2.67GHzとAthlon 64 3500+ 2.2GHzの三台。GHz単位のデータをとったとしても、Core i7が一番速いんじゃないかなと予想。

なお、実行内容はこれ。

rsaperf -e -k 4096 -p 30 -n none

まず、一秒間に何回実行できるかのデータ。シングルスレッドで実行しているので、コアの能力を見る。

予想通り、Core i7が一番速い。ただ、Althon 64 3500+ (Socket AM2の方) も健闘してるっていうより、Core i7ぶっちぎりじゃないんだけど。。。

NSSのRSA暗号化ライブラリ自体がOpetron上でかかれたアセンブラがベースになっている以上、AMDにも有利なものの可能性が高いものだけど、思ったよりCore i7が速くないということはわかった。

採取した各CPUのクロック数は全然違うので、GHz単位のデータに変換して、出し直す。

これが上記のデータをGHz単位に変えたもの。

Core MA系からCore i7に変わっても、5%くらいしか向上してない?。ってか、Althon 64 に大幅に負けてる。Phenomくらいクロックが向上している場合は、Core i7でも不利ってことか。

このデータ見て、64ビット環境のサーバー買うんだったら、やっぱりOpetronなのかなぁとつくづく思った。

eglibc

Drepperは普通のバグ報告だと、(面倒で修正コード作らなくても)すぐ修正してくれる感じのヤツだけど、確かに扱いづらいヤツだよね。

gccのフォーク (EGCS) のときは、gccの開発スピードが遅いことが発端だった気がするけど、Debianの決断はARMがらみのところっぽいね。Androidも別のCライブラリ使ってるし。

少なくとも選択があるということはよいこと。

2009-05-02

エンジニア系の会社はマネージメントを軽視しすぎ

今の会社を辞めることになったんだけど (ある意味違った勉強をさせてもらいました)、前の転職活動の時の話。

そのとき、エージェントにそそのかされて、とある大手SNSサイト (m...) を受けに行ったんだが、個人的にはどういう人がやっているのかどうかという点においては興味あった。実際会った人事の人はセンスを感じない微妙な方 (すみません) だったのだけど、そのときに、CTOやってる人が途中から同席してきた。

その人はYahoo! HQにもいたような人で頭の回転も速そうで、会った印象ではその人の下でやるのもありかなとは思った。

そもそも、SNSというビジネスの限界点というのは容易の想像ができる。サイトの成長の鈍化と2、3年遅れてrevenueの鈍化が起きてくると思ってる(広告収入というのはそういうもの。広告を載せる先を選ぶ決め手は現在のリアルタイムの情報じゃないでしょ?)。そのため、その事業をやっていても停滞は起きるのは目に見えているんだ。会社を成長させるとかではなくて、次の柱を作るなり、市場にインパクトを与える何かを作るべきだと思ってた。そもそもSNSの構造上、データマイニングとかをやってきているはずなので、そこらのノウハウを生かせて新しいサービスをやるべきだと個人的には思ってた。だからそのSNSサイトには興味ないんだけど、受けに行ったんだ。

そういう考えだから、「...iというサイトには一切興味がない」という話を面接でしたんだけど、そりゃ当然面接落ちるよね。

余談すぎた。

その時の面接でちょっと興味が引かれてたのはマネージメント手法の話で、ベースの考えとして、CTOの配下にすべての人をラインとしておいていているという話。(実際バーチャルチームを複数作って、リーダーを作ってるのは、容易に想像はできるんだけどさ)

って話を聞いてたのに、最近別のエージェントと会ったら、その会社、開発のマネージャ募集してて笑った。一年やって失敗したんだね。

今の会社もそうなんだけど、エンジニアを多く抱える会社はマネージメントを軽視しすぎ。

LingrとRejawサービス終了のお知らせ
http://japan.cnet.com/blog/kenn/2009/05/01/entry_27022150/

この話だって、結局のところマネージメントができてなかっただけでしょ?。いろんないいわけしてるけど、それにつきると思うよ。Googleだってそこらを軽視してたのが以前の勢いがなくなったことに繋がっていると思うし。

マネージメントがまともではなければ、1+1=2ができなくなる。優秀な人材を雇っても、彼らを生かす道を造るのはマネージャの仕事だし、モチベーションを維持させるのもそう、個々の能力を今必要なことにマッチさせるのもそう。マネージメントという言葉を理解できなければ、この人は失敗し続けるんじゃないかな。そんな気がする。

2009-04-27

Ubuntu AMD64 版に ATOK X3 Update2 を入れる

いつの間にかATOK X3 for Linuxのアップデートが出てた模様。

Ubuntu 9.04だと、libwrap.soが/lib32に入っているので、単体でインストール可能にはなっているのだけど、JustSystemは相変わらずDebian系の64ビット環境は考慮してくれない。だから今回のパッケージもdebは32ビット版しか入ってないので、deb版のパッケージを使わずに、tarballを使って入れる。

まず、カレントディレクトリを / に移動

cd /

32ビットのGTKライブラリを展開

sudo tar zxvf <your path>/iiimf-gtk-trunk_r3104-js3.i386.tar.gz

このままだと、32ビット版のダイナミックライブラリが/usr/lib (/usr/lib64) に展開されることになるので、/usr/lib32/にコピー。

sudo cp cd /usr/lib/gtk-2.0/immodules/im-iiim.* /usr/lib32/gtk-2.0/immodules/

続いて64ビット版のパッケージを展開

sudo tar zxvf <your path>/iiimf-gtk-64-trunk_r3104-js3.x86_64.tar.gz

IIIMサーバーも展開

sudo tar zxvf <your path>/iiimf-server-trunk_r3104-js3.i386.tar.gz

IIIMサーバーは32ビット版なので、ダイナミックライブラリを/usr/lib32にコピー

sudo cp /usr/lib/libiiimutils.* /usr/lib32/
sudo cp /usr/lib/iiim/iiimd-watchdog /usr/lib32/iiim/

これで、IIIM側のアップデートは終了。あとは、ATOK側を展開

sudo tar zxvf <your path>/atokxup-20.0-3.0.0.i386.tar.gz

これでアップデートが完了。

2009-04-21

Debug本の紹介

私自身は書いてはないのだけど、ちょっとだけネタを提供してたりするので紹介。

基本的は、gcc系のプラットフォーム (LinuxやMacOSX) での有益な話が多いんだけど、デバッグ技法とかを学ぶにはちょうどいいかとは思う。

あとWindowsでのデバッグについてのいい本はないんだよね、現在のところ。カーネルとかにはデバッグ系の機能とかがあるんだけど、それを有益に紹介されてないし。本とか書いてもいいんだけど、出版社に知り合いいないからなぁ

SSE2 と SSSE3の最適化できる場所

今更ながらSSE2のベンチデータをとっているんだけど、Athlon 64は遅い。PhenomだとSSE2は高速化しているんだけど。また、IntelでもPentium Mだと遅いんだよね。MMXを2回実行した方がまだ速いって。

ってのも、Image Decoderの最適化を考えていて (http://wontfix.blogspot.com/2009/01/mozilla-nosse2.html)、PNGについては、いくらかのパフォーマンスアップ (Alpha値を持っている場合でARGBへの変換が約2倍) を得られる。それ以外でも、SSSE3のシャッフル変換使えば、Alpha値を持たないPNGや田の画像形式でもパフォーマンスアップを見込める。SSSE3のインラインアセンブラやビルトイン関数は、VC++2008からだから、_emit使って直に書く必要があるけどね。

もう少し整理したら、レビュー投げるつもり

それ以外に、SSE2での最適化で有名どころといえば、UTF8->Unicodeの変換。たぶんこれはMozillaとして考えてるとは思うけどね。

the u8u16 high-speed UTF-8 to UTF-16 conversion software
http://u8u16.costar.sfu.ca/
http://www.cs.sfu.ca/~cameron/ppopp074-cameron.pdf

2009-04-11

Ubuntu 9.04上でDropboxを使う

いろいろなテストもかねて、開発環境をUbuntu 9.04の開発版に変えたのだけど、Dropboxが動かないようだ。GNOMEのトレイにはアイコンが表示されるのだけど、"Start Dropbox"というメニューしか出ない。

また、8.10まではレポジトリがあったのだけど、9.04用はまだ作られていないようだ。いろいろと調べてみると、最新版に入れ替えれば動くとのことで入れ替えた。

  1. とりあえず、ダウンロード。Dropboxのフォーラムhttp://forums.getdropbox.com/に最新版が通知されるので、それを使う。私の環境はAMD64なので、それ用をダウンロード。
    wget http://dl.getdropbox.com/u/17/dropbox-lnx.x86_64-0.6.507.tar.gz
  2. そして、~/.dropbox-distを削除して、展開
    cd ~
    rm -r .dropbox-dist/
    tar xzf dropbox-lnx.x86_64-0.6.507.tar.gz
  3. Nautilusを再起動
    killall nautilus
Nautilusを立ち上げるなり、再ログインすればDropboxが使えるようになった。

2009-04-04

PGOは64ビットでも有効なのか?

ご存じの通り (なのか?)、Firefoxでは、PGO (Profile-Guided Optimization) を有効にした状態で正式版はリリースされている。PGOというのは、最初のコンパイル時にプロファイルを作成できるようにコンパイルして、その後、実際の動作状態のデータをとって、その後再度コード生成をすることで、コードにおけるさらなる最適化を進めるものだ。なので、複数のオブジェクトファイルやライブラリに渡っていたものでも、インライン化などを通じてコードの高速化に寄与する。

これは、x86だと、FASTCALL以外は、引数の受け渡しにスタックを利用するので、x86だと高速化に寄与できるし、Itaniumの場合は、汎用レジスタの数が膨大なので高速化できるだろう。ただ、x64 (AMD64, EM64T) の場合は、どうだろうか?。汎用レジスタの数は増えているから、当然最適化しやすいが。

実際、ここにMicrosoftの資料がある。

http://msdn.microsoft.com/ja-jp/library/aa289170%28VS.71%29.aspx

このデータをみると興味深いのだけど、Itaniumは非常に高速化に寄与するみたいだ。コンパイラで最適化を図ってくれ!というアーキテクチャなので、当然といえば当然か。

最近Visual Studio 2008 Professionalを手に入れたので、SunSpiderでFirefoxのテスト。これがデータ (x64なので、JITは有効ではない)。

Firefox trunk w/o PGOFirefox trunk w/ PGO
5510.6ms5174.8ms6% faster

ちょっとは早くなるけど、ベンチマーク上はそれほどでもないんだよね。。。

2009-04-01

BTSに登録したから、誰かが見てくれると思っているのは間違い

OSSじゃなくても、大規模なソフトウェアだと、バグトラッカーシステム (BTS) は導入されているんだけど、BTSに登録したから、誰かが見てくれると思っているのは間違い。

ゴミくずのようなバグが増えていく

昔勤めていた会社は大規模なソフトウェア会社だったためBTSはあったんだけど普通にバグを登録しても放置される状態になる。それは、そのバグ登録等については誰でもできたため、ゴミくずのようなバグだらけになるからという原因がある。(実際問題、原因がソフトウェアに関するものではなかったり、違うバグ修正で直っているものだったり、過去のバージョンで直したものだったり!)。

またその時の一番の問題は、バグを登録した際にアサインがデフォルトでなしという状態だったのが、一番の問題だった。だれもアサインされてないんだから、当然誰もやりやしない。重要なバグであってもね!。

その会社ではBTSを変える時に、デフォルトアサインのままだとバグを登録できなくするように変更したため、誰にアサインすればいいのかが分からない人にはバグ登録ができなくなるということになった。ちょっと敷居をあげた状態に変更したおかげで、常に誰かにアサインされるため、誰かが一旦はバグを見ることになるオペレーションへ変更した。

また、ゴミのようなバグが増えるきっかけは、開発フェーズの時に報告されたバグが多数残ること。開発をやっている人だったら分かるとは思うが、一つのバグの修正が複数のバグを修正することは多くある。そのため、既に直っているバグがアクティブのままずっと放置されることなんてよくあることになる。その後誰かがもう直っているかどうかの検証をしないと、バグが直っているのにもかかわらず、数字上はバグが残っている状態になる。もちろんテスターがそれを検証すれば、もう再現しないから(work for me)、そこでクローズとなんだけど、ただ開発のマネージャからしてみれば、そんなにテスターにコストを払わないといけないの?。そんなゴミのようなバグ報告に対して??ってことになるよね。

ゴミバグへの対処 (とりあえずクローズする)

とあるソフトウェア部隊だと、そういうゴミバグに対処するため、メジャーバージョンのリリースが行われた時点で、アクティブなバグについては基本的に修正しない(won't fix)でクローズをしてしまって、報告者に「新しいメジャーバージョンで試して、直ってなければ再オープンしろ」という指令が下る。そのため、ある程度のバグの掃除が可能だ。当然、報告者がいなくなったりして、まだバグが残っているのに再オープンされないものもあるから、バグ報告が見逃されるのでは?って思うかもしれないけど、でも、それが重要なバグだったら、誰かまた報告するでしょ?。また、マイナーバージョンは?って言われれば、それ専用のBTSを別途もっておいて、「そこに報告しろ!」っということにすればいい話。マイナーバージョンのリリースチームがレビューして直すかどうか判断すればいい話だからね。

ゴミバグへの対処 (バグ報告者を制限する)

上記のようなゴミバグを増やさないためには、優秀なテスターにのみバグ報告を許すというやり方もある。あるソフトウェア部隊ではそういう手順を取っていた。そのため、使っていて非常にバグが多いようなソフトウェアがリリースされた (実務で使えば、そんなことくらい分かるだろ!ってバグ多数)。また、外向けのコメントでもこのくらいバグのない状態でリリースできました!という数字のマジックを発生させて、(優秀でなくとも) その開発マネージャが昇進するという、笑えるオチがつくんだが。

この方法の一番の問題は、バグをそのテスターに報告したとしても、バグが登録されるかどうか分からない点と、実は優秀で何でもできるような人を取り込みずらくなる (そのソフトウェアにモチベーションを持てなくなる) 。

前者は、そもそもテスターの問題なのかもしれないけど、テスターに報告したとしても、そのテスターの環境でたまたま再現しないだけで、「再現しないから、バグ登録しない」という話になりやすい。でも、それは、コードを直接書いている人だったら、自分の環境で再現できる話なのかもしれないし、別の関係ない人が再現方法を明確にするかもしれない。だからそのようなところで止めるべきではないと思う。(ただ、バグの書き方が分からない人をヘルプする人やものは必要だとは思うけどね!)

後者は、自分がいろいろできる人だと、変な仲介者を制限されるのは嫌う傾向にある。コードが書けるんだったら、こう書けばもっといいのに!って思うのは当然だし、直接チェックインもしたくはなるよね。だから、直接BTSに登録して仲介なしに議論したいと考えるのは当然。そういう人に対して変な仲介者を通さないといけない状況を作った場合、バグを登録するのにも、無駄な労力を使っていく状態を作ることが、そのコードに対するモチベーションを下げる要因になりやすい。しかも、もしその仲介者のスキルが報告者よりも下だったら、なおさら、無駄な労力を使うことになるので、よりやる気を失っていく。。。

自分の考え

そもそもBTSは、開発する上で必要なトラッキングツールなんだけど、外部の人にバグエントリの追加や更新を許可する場合の一番の理由はQAや開発のコストを下げるためなんだ。そもそも無尽蔵にリソースがあるのであれば、別に外部に開かれる必要もないしね。OSSについては、それを外部に依存しているんだから、BTSの運用方法をより考える必要がある。

個人的には、バグ報告者を制限するやり方は非常にまずい。バグを報告してくれる人ってのは、悪意ではなく善意の場合がほとんどなんだ。ゴミが増えるということやクオリティ維持のためにそんな方法で善意のある人も制限するのは、バグがあるのにバグ報告がなくなるという悪循環になりうる。善意で報告しているのに、(開発者でもない人とかに)とやかく面倒なこと言われたら、モチベーションが下がるでしょ?

次はMozilla.orgについてのBTSの話を書いてみようかと思っている。

2009-03-20

Internet Explorer 8雑感

Internet Explorer 8をインストールしてみた。Internet Explorer 7以降からは、Explorerが使うシェルとして重要なDLLをInternet Explorerが上書きしないようにしているので (解決したアイデアがすべてのライブラリをスタティッ...(略))、バージョンアップしてもシェルの動作への影響は少なくなったし。

彼らのタイムフレームからして、10年以上も前に作った基本設計の古いレンダリングエンジン Tridentへの修正を少なくして、ブラウザのユーザービリティへフォーカスしてきたのは当然だし、理解できる。

またScript Engineの強化ははやりのJIT系じゃないけど、たぶん、次のバージョンくらいにはMicrosoft Research製のJITとかが投入されるんじゃないかなぁ。そもそもActiveScriptというプラガブルなアーキテクチャを採用しているから、置き換えることについては技術的には難しくない。互換性の面では厳しいかもしれないけど。

あと、

  • 一番最初に起動して気付いたのが、メニューバーが表示されててダサイ。Vista準拠のUIを使っている以上 (Vistaの為に作ったのをXPに持ってきている以上)、メニューを表示すると、ツールバーのど真ん中になるのはしょうがないんだけど、XP版だけメニューを表示している大人の事情をある程度は知っているため、それに対してはこれ以上ノーコメント。
  • プロセス一覧を見ると、Google Chromeの用に各タブにアサインされた複数のプロセスが起動されている。Internet Explorerの構造的に各ウィンドウは個別のスレッドを割り当てられるように設計されていたし (プロセス分離も可能になっていた)、7でタブが追加された時も、各タブ毎にスレッドを分離していたので、構造的にプロセスに分けることはそんなに難しくもないはず。できる範囲でトレンドを入れることはしてきている。
  • アクセラレータ (アクセラレーターじゃないのかよ) にはリリース時点でいろいろ登録されている。ここらはMicrosoftが一番得意なパートナー向けの交渉だから、さすがというところだけど、ちゃっかりGoogleのアクセラレーターがいろいろ登録されているところが、Googleらしいというか。

少なくともMicrosoftがブラウザに再び投資を始めているということは、競争という面ではMozillaにもGoogleにもいいことだ。競争があるからこそ新しいイノベーションが生まれるから!。

Thunderbird 3.0へアップグレードしたらメールが消えた

普通のメールクライアントを家ではそんなに使ってないのだけど、会社では当然使っている。会社の環境をちょっと前にThunderbird 3.0 Beta 2に変えたのだけど、笑えるバグを昨日気づいてしまった。

自分の使い方として、どういうメールクライアントを使っていても、メールを整理するためにarchivesという名前のフォルダを作って、古いメールをメール分類毎や受信日時で分ける使い方をしてる。

先日古いメールを検索しようとして、メールを探し始めたら、メールが一切見つからない。。。あれれ?と思ったんだけど、よくよく考えると、3.0に変えてからそのフォルダ内の検索をしてなかった。

Thunderbird 3.0では、アーカイブフォルダというのが追加されているから、もしやと思って、ファイルシステム上のファイルをみたら、archivesというファイルとArchivesというファイル両方が存在してて、Thunderbirdは自分で(アーカイブフォルダ用に)勝手に追加したArchivesを参照するので、2.0を使っている時に存在してたarchivesを無視してた。構造上Thunderbirdはアルファベットの大小を区別しない仕組みになっているので、当然だよねって、おい!!!!。メールデータはロストしてないけど、ある意味致命的というか。

デバッグする気も失せたので、バグファイルしておいた。Bug 484329 - Upgrading to 3.0 causes "archives" folder disappears。ちなみにWindowsではファイルシステムが大小を区別しないので起きないとは思うけど。

Android Dev Phoneのファームウェア更新

Android Dev PhoneのファームウェアもG1と同じようにバージョン1.1がリリースされたので、更新を行った。その際のメモ。

  • fastbootコマンドが< waiting for device >で応答が返ってこない場合は、デバイスマネージャでUSB大容量記憶装置デバイスに黄色のビックリマークが付いているので、ドライバの更新を選んで、Android Dev Phoneのドライバを指定すること
  • ユーザデータを消すようにするので、当然APN情報も消える。

ファームの更新方法は、OTAで出来ると思いこんでいたけど、Dev Phoneだけに古典的な方法をとるのね

2009-03-17

Firefox 3.1/3.5 のVIDEO再生のパフォーマンス

3.1 beta 3のリリースノートにも載っているが、

Some users with older computers or slower Internet connections may experience choppy OGG video/audio playback (see bug 462667)

Firefoxに内蔵されたビデオ再生機能のパフォーマンスは非常に良くない。

動画系のコードをみればわかるけど、iDCT (逆離散コサイン変換) やYUV->RGB変換など、SIMDで高速化できるような処理をMMXやSSE2を使わずに処理しているので、パフォーマンスが悪くて当然 (oggを扱えるアプリケーションは、本家のライブラリを使わずにチューニングした別のライブラリを使っているのが見受けられるくらい、本家のライブラリはチューニング不足)。最新のliboggplayとかであれば、YUV->RGB変換などをMMXやSSE2等を利用してスピードを稼いでいるので、Firefoxで利用している各ライブラリがバージョンアップされれば、ある程度はパフォーマンスが向上するとは思う。

そもそもNVIDIAなどのGPUだと、(動画再生支援機能として) iDCTくらいは自前で実装されているので、本当はGPU側でやるのがそもそも一番だとは思うのだけど、そこらを含めた抽象化ライブラリって、意外にないんだよね (DirectXにはあるけど、OS非依存のものがない)。また、DirectXとかで動画再生する場合は、YUVで直接描画できるから、ARGBへの変換なんていらないから、よりCPUに優しいんだけど。。。

OpenCLが早く来ないかな...

2009-03-11

NSS 3.12.3

Firefoxでも使われているnss(network security service / netscape security service)は、Mozillaのツリーの中でも異質なもので、コミット権限も非常に制限されている(mozilla-centralとかとは別管理)。現時点のコミット権限を持つのは、元Netscapeの社員とSun(iPlanet関連)の人くらい。パッチを投げたとしても、非常に無駄な労力を使う必要があんだけど、Crypto関連なので理解はするけどね。

EV-SSL関連の話があるので、現在開発中の3.12.3がFirefox 3.5に入ってくる可能性がある。このバージョンには、自分がいろいろチューニングパッチを作成していくつかコミットはされているので、いくつか説明。

x86上でバイトオーダー変換にインラインアセンブラを利用する

gccを使う環境(Unix & Mac)であれば、DESとSHA512はベンチ上では数パーセントから10パーセントくらいのパフォーマンスの上昇を見込める。VC++は?ってパッチ投げるの忘れた。

AES-NIの使用

これは元Netscape社員で現Red Hatの人から。今年の中盤に出てくるCore i7の新しいCPUでは、XMMレジスタを利用したAESの補助命令が追加されているんだけど、対応CPUであれば、それを利用するようになった。ただしこれは、gcc (x86_64) のみ。VC++で必要であれば、ってオレがやらないと誰もやらないだろうけど。

x86上での演算ライブラリのSSE2

gccを使っている場合、nss内部の演算ライブラリ (mpi) で一部の命令をSSE2で高速化していたんだけど、これをVC++の環境にも広げた。また、SSE2コードはインテル製のみでしか動かなくしていたんだけど、CPUチェックコードを外したので、SSE2をサポートしたCPUであればすべての演算が高速化する。

Sun MicrosystemsのJulienが調べた結果では、以下の通り。ベンチ内容は1024ビットRSAの暗号化を4スレッドで30秒実行したもの

CPU3.11Trunk
Intel Q66001468 ops/s1822 ops/s124%
Phenom 9750646 ops/s775 ops/s119%

AMDのCPUであっても、パフォーマンスが上昇するので、CPUチェックは取り外された。K10コアではなく、K8コアでもどうなのかっていうテスト結果もあって、それはこれ (このテストは2スレッドで30秒)。

CPU3.11Trunk
Opeteron 246 2GHz533 ops/s628 ops/s117%

20%くらいの上昇が得られるようになる

Windows x64環境での演算高速化 (まだ未コミットだから入るかどうかは未定)

Windows x64環境ではアセンブラ化した演算ライブラリを使ってなかったんだけど、VC++環境下でもアセンブラ化したものを利用するようにしたもの。これは、nssをx64ビルド化しないと意味ない話だけど。

テスト結果 (1024ビットRSAの暗号化を4スレッドで30秒実行) がこれ。

CPUtrunkTrunk w/ patch
Intel Q66001398 ops/s5048 ops/s361%
Phenom 97501508 ops/s6131 ops/s406%

K8コアでのテスト結果 (1024ビットRSAの暗号化を2スレッドで30秒実行)

CPU3.11Trunk
Opeteron 246 2GHz620 ops/s2408 ops/s388%

圧倒的に高速化する。このベンチと上のx86+SSE2でのベンチ結果を見るとおもしろいんだけど、x86-64環境では、64x64のかけ算とかをネイティブにできたりするので、速度が圧倒的に違う。しかもおもしろいのは、64ビットモードでのAMD製CPUの速さ。Core i7だと64ビットモードも速いはずなので、その結果も見たいとは思うけど。

2009-03-09

SourgeForge.jpのやっつけ記事

インテルから金が出ているかどうかは知らないけど、この記事に対して、一言コメント。

  • Firefox3.0/3.1(3.5)は、Visual C++ 2005でコンパイルしてるんだから、それとインテルコンパイラを比較しないと意味ない。というより、自分でビルドしなくても、オフィシャルビルドと比較すればいいじゃん。バージョン新しい == 高速と思ってるひとなのかな?
  • Visual C++ 2005でjemallocとPGO有効にすれば、SunSpiderの結果なんて、インテルのコンパイラよりもVisual C++ 2005の方が高速になる(はず)。jemallocを使うだけでSunSpiderの結果なんて5%-10%くらいスコアが上がるから。Visual C++ 2008でビルドしてもjemallocは有効にならない。
    コード見ればわかるけど、Mozillaでは、CRTのソースコードにパッチを当てて、独自のMSVCRTを使っているから、特定のバージョン (Visual C++ 2005 SP1) のみしかjemallocを使わない。(2008のパッチを入れてほしいという要望はもちろんある)
    所詮 Windowsのヒープマネージャなんてクリティカルセクション使いまくりの設計古いやつだから、遅いに決まってる。(Windows 7でチューンナップされてるらしいが)。もちろん、Windowsのヒープマネージャは、グローバルフラグの変更のみでデバッグヒープ (2重解放の検出、リークの検出、アンダーラン・オーバーランの検出) を使えるとかいい点もあるけどね。
  • インテルコンパイラの場合ってPGOのオプション有効にできないんだっけ?。それ有効にしないと真価が発揮できないと思うんだが

2009-03-04

Net Applicationsの調査が非常に微妙

Net Applications調査の2月のモバイルブラウザシェアのデータを見たところ、納得いかないというか、この数字おかしいだろ。

まず、OS。

iPhoneが66.44%、Java MEが9.11%、Windows Mobileが6.9、Androidは6.26%、Symbianは6.17%。

これだけみるとへぇーと思ったんだけど、別のデータを見てみる。User-Agent別のデータ

Safariが77.53%??、Opera Mini 9.11%???、Microsoft Internet Explorer 5.1%、Netspcae????が 2.71%

Safariは、モバイル上ではiPhone上でしか動かないのに、OSのシェア超えてるってどういうことやねん。おそらく、WebKitベースをすべて入れたってこと?。iPhone上のブラウザは、Safariしかない (自身のWebKitを使ったアプリしかインストール不可だし)という条件と、AndroidとSymbianを足してみると。

iPhone 66.44 + Android 6.26 + Symbian 6.17 = 78.87%

Symbianの一部 (S60 3rd以降はWebKitベース。そのまえは別)だから、1.34%がS60 2ndとUIQとAndroidの一部 (Opera Mini) にすれば一致するか。それをSafariを計算することがそもそも変。WebKitを使えば、すべてSafariってねぇ。

また、モバイルなのにNetscapeって何だよ?と思ったけど、おそらくSkyfireじゃないな?。あれ、Gecko1.8ベースのものだし。

あと、Symbianのシェアがそんなに低いんだぁと思ったけど、よくよく考えたら、ACCESS NetFrontのシェアが低いというから考えれば、ヨーロッパおよびアジアのデータが入ってない。おそらく、モバイルブラウザのシェアは、全世界で考えたら、ACCESS Compact NetFront (i-modeのブラウザおよびSoftbankのブラウザ) がシェアNo.1の可能性が高いはず。日本のモバイルにおけるトラフィックはおそらく世界一。

結局のところ、アメリカの未熟なモバイルマーケットの情報をみても役にたたないというか、こんなシェア、どこの会社でもひっくり返すことができる数字としか見えなかった。たったそれだけ。

2009-03-01

ソフトバンクかドコモで一日データ定額プランがほしい

仕事で地方に行くこともあるんだけど、今のノートがExpressCard仕様なので、会社で確保しているPCMCIAのWILLCOMのカードは使えない。今はどうにか無線LAN(というかマクドナルド)を使える場所でいろいろするんだけど、EMモバイルを使おうかどうか迷ってる。

スペイン行った時に売っていたプリペイドなんてのはそういう用途には非常に助かるんだよね。一日パケット通信定額とかあったりするので、数十ユーロくらいのプリペイド買って、現地滞在してても通信には困らない。そういうのを経験すると、いつの間にか日本がネットワーク後進国になりつつあるんじゃないかとつくづく思ったりする。

日本のEMモバイルにも定額プランがあるんだけど、あれにプリペイドバージョンでかつ2.1GHz帯であれば、契約を考えるのにってつくづく思う。(SIMカードのみの契約を受け付けてないんだよね、彼らは。独自の1.7GHz帯だから、SIMカードのみの契約をしたとしても、使う端末は中古ということになるからだとは思うけど。)

なので、2.1GHz帯のソフトバンクかドコモでやってくれないかなぁ。一日定額650円にしてもいいから。

2009-02-28

Safari 4.0雑感

箇条書きで。

  • タイトルバーにタブを置いたおかげでタイトルバーが若干大きくなったのは微妙。
  • フォントのレンダリングがWindowsっぽくなってる。CoreGraphicsを使うのをやめた訳ではなくて、CoreGraphicsのフォントレンダリングのやり方を変えたっぽいね
  • 速さという点においては、Google Chromeにかなわず。Chromeと言えば余談だけど、最近WebKitのレビュワーにDarin Fisherが加わってた。
  • CoverFlowって使いやすいか?。iTunes使ってるけど、あのUIは最初だけな感じだった。NeXTユーザーだった自分としては、あの3列のリストボックスは好きだけど。

もう少しおもしろいアイデアとかUIを持ち込むかと思ったら、CoverFlowなUIだけというのは正直がっかり。まだIE8の方がおもしろさがある(Trident以外のところね)

Fedora RawHideで日本語に中国語フォントが使われる

FedoraのRawHideを最新にしたら、日本語フォントが、中国語フォントで表示されるような状態になってた。

何かのフォントが悪さしているだけっぽい(日本語フォントよりも中国語フォントが先に参照される状態ともいう)なので、調べてみると、以下のモジュールが悪さしてたので、このフォントを削除したら、san-serifで日本語文字に日本語フォントを使うようになった。

$ rpm -q cjkuni-fonts-common-0.2.20080216.1-20.fc11.noarch --info
Name        : cjkuni-fonts-common          Relocations: (not relocatable)
Version     : 0.2.20080216.1                    Vendor: Fedora Project
Release     : 20.fc11                       Build Date: 2009年02月03日 10時13分01秒
Install Date: 2009年02月26日 19時53分10秒      Build Host: x86-6.fedora.phx.redhat.com
Group       : User Interface/X              Source RPM: cjkuni-fonts-0.2.20080216.1-20.fc11.src.rpm
Size        : 19545                            License: Arphic
Signature   : (none)
Packager    : Fedora Project
URL         : http://www.freedesktop.org/wiki/Software/CJKUnifonts
Summary     : Chinese Unicode TrueType font common files.

それよりも、アップデートで入ったKDEのオーバーローカライズさにウケる。

san-serifとかmonospaceというフォント名をローカライズするのはどうかと思う。(どっかの何とか95というOSのとあるツールなんて、オプションを全部ローカライズしてしまったために、/all/全になってたのはオーバーローカライズの一例だけど)

2009-02-25

TraceMonekyの各アーキテクチャ版のステータス

誰も触れてない話。GoogleのV8なり、WebKitのSquirrelFish ExtremeよりもTraceMonkeyの勝っているのはx86以外のプラットフォームもサポートしていることなんだけど、それの現在の状況。

  • x86_64は現在なし。AdobeがTamarin-Redux用に新たに書き直したNanoJITのx86_64 JITは存在するんだけど、SpiderMonkeyのNanoJITとインターフェイスが微妙に違うから、そのまま持ってくるのは不可という。。。
  • ARMは、Nokia N810用のものがあるけど、ARM Thumbのコードはメンテしてないので、ビルド不可
  • ARM JIT for Windows Mobileはまだ動かないけど、これは現在作業中
  • SunからSPARC版のNanoJITは投入済み。Tamarin-Reduxにも両方

NanoJITが発表された時は、ARM Thumbとx86のJITがあったわけだけど、x86_64がいったんサポートされた後、ARM Thumbとともに未サポートになって、今は、SPARCとARM追加されたというところ。

2009-02-20

Iris Browser 1.1が出ていた

WebKitを使っているWindows Mobile用のWebブラウザ、Iris Browserのバージョン1.1が出てたので、アップデート。

どうも、Safariでいう、4.0のWebKitのバージョンに変えたらしく、Acid3テストは、100点になった。(Firefox 3.2は最近自分のチェックインで94点になってるはず。コンパイルフラグでSMILを有効にすれば、96点くらいになるはず)。

あとは、最近のモバイル用ブラウザみたく、画面の拡大・縮小を行うようになってたりする。また、Iris Browserらしく、クリックしたところが画面のエフェクトで凹むUIは相変わらず(センスない)。

特徴も何もないので、相変わらず微妙なのは変わらずってところ

2009-02-19

ARM RealView Development Studioの価格

RealView Development Studioの価格はいくらなのか興味あったので、ARMのサイトで調べ てみる。

ARMのサイトでは、どうも価格表が載ってないらしく、代理店やってる横河のサイトに行けと言われる。で、横河のサイトいって分かったことは、価格表は見積もりをしないと分 からないとのことらしい。

そんなんであきらめてもしょうがないから、海外のサイトを調べると、だいたい分かった 。

  • RealView Development Studio 4.0 Standard ... $6,600
  • RealView Development Studio 4.0 Professional ... $8,600

1年ライセンスだと、

  • RealView Development Studio 4.0 Standard ... $3,000
  • RealView Development Studio 4.0 Professional ... $3,800

BREW用だと一年ライセンスで$1,500くらいなのにやっぱり、高いよね。安ければ買おうと思ってたけど、あきらめた。

2009-02-16

検索結果に鮮度

今、Androidのちょっとしたアプリを書いているんんだけど(といっても、今日書き始めた)、APIの使用例を探そうとGoogleで検索したところ、古いAPI仕様のコードが1ページ目からでまくり。

今まで検索結果に鮮度を含めるのはどうかなぁと思ってたんだけど、鮮度は含めるべきだよね。やっぱり。

2009-01-29

Another MMX/SSE/SSE2 optimization bugs

All SSE2 platform

All SSE2 platform except to Windows

  • 475225 - Add JPEG optimization for x86_64 platform
    Windows x86でしかSSE2使ってないので、GCC系のプラットフォームにも移植する予定。といっても、Fedoraとかだと、--with-system-jpegつけてビルドするからオフィシャルビルドとかしか影響しないけど。

For Windows x64 only (will be only on mozilla-central)

2009-01-28

ふと思ったmozillaのSSE2最適化

/modules/libpr0n/decoders/png/nsPNGDecoder.cpp
695 void
696 row_callback(png_structp png_ptr, png_bytep new_row,
697              png_uint_32 row_num, int pass)
698 {
 :
 :
793     case gfxIFormats::RGB_A1:
794       {
795         for (PRUint32 x=iwidth; x>0; --x) {
796           *cptr32++ = GFX_PACKED_PIXEL(line[3]?0xFF:0x00, line[0], line[1], line[2]);
797           if (line[3] == 0)
798             rowHasNoAlpha = PR_FALSE;
799           line += 4;
800         }
801       }
802       break;
803     case gfxIFormats::RGB_A8:
804       {
805         for (PRUint32 x=width; x>0; --x) {
806           *cptr32++ = GFX_PACKED_PIXEL(line[3], line[0], line[1], line[2]);
807           if (line[3] != 0xff)
808             rowHasNoAlpha = PR_FALSE;
809           line += 4;
810         }
811       }

ここで使ってる GFX_PACKED_PIXEL のマクロってどうなっているかと思ったら、

/gfx/thebes/public/gfxColor.h
118 /**
119  * Fast approximate division by 255. It has the property that
120  * for all 0 <= n <= 255*255, FAST_DIVIDE_BY_255(n) == n/255.
121  * But it only uses two adds and two shifts instead of an 
122  * integer division (which is expensive on many processors).
123  *
124  * equivalent to ((v)/255)
125  */
126 #define GFX_DIVIDE_BY_255(v)  \
127      (((((unsigned)(v)) << 8) + ((unsigned)(v)) + 255) >> 16)
128 
129 /**
130  * Fast premultiply macro
131  *
132  * equivalent to (((c)*(a))/255)
133  */
134 #define GFX_PREMULTIPLY(c,a) GFX_DIVIDE_BY_255((c)*(a))
135 
136 /** 
137  * Macro to pack the 4 8-bit channels (A,R,G,B) 
138  * into a 32-bit packed premultiplied pixel.
139  *
140  * The checks for 0 alpha or max alpha ensure that the
141  * compiler selects the quicked calculation when alpha is constant.
142  */
143 #define GFX_PACKED_PIXEL(a,r,g,b)                                       \
144     ((a) == 0x00) ? 0x00000000 :                                        \
145     ((a) == 0xFF) ? ((0xFF << 24) | ((r) << 16) | ((g) << 8) | (b))     \
146                   : ((a) << 24) |                                       \
147                     (GFX_PREMULTIPLY(r,a) << 16) |                      \
148                     (GFX_PREMULTIPLY(g,a) << 8) |                       \
149                     (GFX_PREMULTIPLY(b,a))

だから、アルファブレンディングしたPNGを持ってくると遅すぎじゃないかな?

こんな感じのパックドコードをSSE2で実装すれば約2倍くらいは速くなるような。

xmm0080 = _mm_set1_epi16(0x0080);
xmm0101 = _mm_set1_epi16(0x0101);
xmmAlpha = _mm_set_epi32(0x00ff0000, 0x00000000, 0x00ff0000, 0x00000000);

data = _mm_loadu_si128((__m128i*)src);
dataLo = _mm_unpacklo_epi8 (data, _mm_setzero_si128 ());
dataHi = _mm_unpackhi_epi8 (data, _mm_setzero_si128 ());

alphaLo = _mm_shufflelo_epi16 (dataLo, _MM_SHUFFLE(3, 3, 3, 3));
alphaHi = _mm_shufflelo_epi16 (dataHi, _MM_SHUFFLE(3, 3, 3, 3));
alphaLo = _mm_shufflehi_epi16 (alphaLo, _MM_SHUFFLE(3, 3, 3, 3));
alphaHi = _mm_shufflehi_epi16 (alphaHi, _MM_SHUFFLE(3, 3, 3, 3));

alphaLo = _mm_or_si128(alphaLo, xmmAlpha);
alphaHi = _mm_or_si128(alphaHi, xmmAlpha);

dataLo = _mm_shufflelo_epi16 (dataLo, _MM_SHUFFLE(3, 0, 1, 2));
dataLo = _mm_shufflehi_epi16 (dataLo, _MM_SHUFFLE(3, 0, 1, 2));
dataHi = _mm_shufflelo_epi16 (dataHi, _MM_SHUFFLE(3, 0, 1, 2));
dataHi = _mm_shufflehi_epi16 (dataHi, _MM_SHUFFLE(3, 0, 1, 2));

dataLo = _mm_mullo_epi16(dataLo, alphaLo);
dataHi = _mm_mullo_epi16(dataHi, alphaHi);

dataLo = _mm_adds_epu16(dataLo, xmm0080);
dataHi = _mm_adds_epu16(dataHi, xmm0080);

dataLo = _mm_mulhi_epu16(dataLo, xmm0101);
dataHi = _mm_mulhi_epu16(dataHi, xmm0101);

data = _mm_packus_epi16 (dataLo, dataHi);
_mm_storeu_si128((__m128i*)dst, data);

今度テストしてみよう。

2009-01-21

Intel's AES-NI instructionsの各ソフトウェア上での実装

Westmere以降のIntelのCPUでは、新機能として、XMMレジスタを使ったAES暗号のための補助インストラクションが追加されているんだけど、チップに機能があったって、コードがなければ意味がない。

その実装の各ソフトウェアでの実装状況について。

Linux Kernel

http://lwn.net/Articles/311094/にパッチの投稿がある。まだ入ってないけど、パッチあり。

Network Security Services (NSS)

https://bugzilla.mozilla.org/show_bug.cgi?id=459248がバグエントリ。コードは既にコミットされていて、NSS 3.12.3 Beta1 から含まれる。でもLinux x86_64とSolarisのみ。

OpenSSL

http://groups.google.com/group/mailing.openssl.dev/browse_thread/thread/15d5fd5b74d528aeにパッチの投稿がある。まだ入ってないけど、パッチあり。

各暗号系の実装はCPUがリリースされた時点でそろってるっぽいよね。

2009-01-18

Windows 7を入れてみた

開発用に使っているノートPC (Dell XPS M1210) に、最近公開されているWindows 7のパブリックベータを入れてみた。

壊してもいい環境だったんで、アップグレードインストールした雑感。

  • アップグレードに4.5時間ほどかかった
  • 英語キーボードの環境だったのに、日本語キーボードに変えられた
  • Intel GM945のドライバがWindows Updateから入れられない

思ったよりは、いい感じかも。