2008-12-30

Firefoxに欠けているもの

Firefoxのシェアは20%を超えるくらいまで伸びているようだけど、これは今後ジリ貧になる可能性が高いと感じている。今のユーザー層というのは、一般のConsumerであって、企業ユーザーではない。

もし自分がSIerだったら、Firefoxを元にしたシステムの導入を選べない。ちょっと理由を書いていく。

LTS (Long Time Support)の欠如

まず、Firefoxのリリースとサポート終了日を確認してみる

リリースEnd Of Life
Firefox 1.02004年11月2006年4月
Firefox 1.52005年11月2007年5月
Firefox 2.02006年10月2008年12月
Firefox 3.02008年6月

次の表は企業用でもっともシェアのあるやつ。ちなみに触れておくと、メインストリーム終了ってのはプレミアサポート経由での個別バグフィックスサービス(基本的に無償)の提供が終了する日で、End Of Lifeはセキュリティ修正のホットフィックスも終了する日。金さえ払って契約しておけば、この期間が過ぎてても個別対応はあるそうだけど。。。(実際、サポート期間が切れる前に契約を事前にしておく必要があるらしい)

リリースメインストリーム終了End Of Life
Internet Explorer 6 with 20002001年9月2005年6月2010年7月
Internet Explorer 6 with XP2001年9月2009年4月2014年4月
Internet Explorer 7 with XP2006年11月未定(おそらくXPと同様)未定(おそらくXPと同様)
Internet Explorer 7 with Vista2007年1月未定(おそらくVistaと同様)未定(おそらくVistaと同様)

こう見るとわかるけど、MicrosoftとMozillaだとサポート期間が明らかに違う。Web DesignerやConsumerだと、なぜ早く終わらないの?。検証しないといけない環境が多すぎるという声は当然あると思うけど、企業からの声は逆で、もうやめちゃうの?早すぎ。延長してくれというクレームが多い。

いくら標準をうたっているブラウザであってもトリッキーなページの解釈についてはバグがつきもの(バグをつくようなAcid Testを見ればわかる)。そのため、システム提案・開発・導入時にはバージョンも指定して、そのバージョンで固定する場合が当然かと思う。そのとき、FirefoxのようなすぐEnd Of Lifeを迎え、なおかつ、新しいバージョンとのオーバーラップ期間もほとんどないものを選ぶなんて、基本的には自殺行為もいいところ。

企業でひとつのシステムが稼働するのは、3年から5年以上。そのため、それを計算して導入を検討するんだけど、Firefoxのようなサポート期間が短いものだと、検討の対象にできない。

Linuxだとディストリビューターが管理も行うから、ちゃんとブラウザのバージョンが固定かと思ったら、タチが悪い。Red Hat Enterprise Linux 5には、Firefox 1.5が付いているんだけど、5.2にあげるとFirefox 3.0になってしまうという。これを聞いて、RHELをデスクトップには推奨できなくなった。(SuSEはどうか知らない)

Deployment

IT企業のようにPCだけ渡されて、「好きにしていいよ、Proxyはこれ。またメールについては、SMTPはこれ、POP3はこれ、IMAPだとこれね」って教えられるようなところだと別にどうでもいいかもしれないけど、通常の企業の場合、そんな設定さえも自動にできないとIT部門のコストがかかってしょうがない。

Firefoxでも、プロキシ構成についてはスクリプト(通称PACファイル)を仕込んでおけばプロキシサーバーの変更を一手に行える。

これがInternet Explorerだと、その機能に加えて Active Directoryのグループポリシー機能を利用した設定の自動変更さえも一手に行える。システム管理側としては(動くか動かないかは抜きにして)選ぶ理由にもなり得る。

また、セキュリティアップデートというのがくせ者。アップデートを簡単に管理者がコントロールできるようにする機能もないので、それが帯域を占有したり、勝手にアップデートをされた結果、イントラネット上のツールが動作しなくなるということも発生しうる。そのために(ツールの修正を行うまで、ダウングレードを手動で行わせたりするような)追加コストでさえも無駄に発生してしまう。Microsoftだとすべては無償のツール使ってできるんだよね。

じゃ、それで?

明らかに足りない部分はあるので、こういうメンテナンスビリティを来年をちょっとやっていこうかなぁとは思っているんだが。今考えてるのはそんなところ。

2008-12-24

各ブラウザのDNS Resolver

@ITから。

http://www.atmarkit.co.jp/news/analysis/200812/22/chrome.html
これは読んで字のごとく、DNSによる名前解決を事前に行うという機能だ。Webページが表示されたら、そのHTMLに含まれる各URLのドメイン名について、先にDNSサーバにクエリを投げて名前解決をし、IPアドレスを取得しておく。こうすることで、処理自体は軽いのに時間がかかりがちな DNSクエリの往復時間を節約できる。

記事書く人のスキルセットは当然微妙なのだけど、各ブラウザのDNSリゾルバの実装について書いてみる。

IE(WinInet)でもDNS<->IPアドレスのマップというのはキャッシュ(ExpireTimeは当然レジストリで調整可能)するので、同一ホストへの二度目以降のアクセスは高速化するはず。これはMozilla (Firefox/Necko)でも同様に持ってる。

これらのブラウザで使われているDNS名のキャッシュというのは、1つのWebコンテンツは基本的に(画像やCSSなどの要素が)同一ホストに置かれている場合がほとんどであるということを想定しているもの。すなわちDNSクエリーの数を最小限にする最適化のため。

SafariはCoreFundationの中の話になるとは思うけど、同じようなことしてんじゃないかなぁ。Operaもだけど。持っている情報からはわからないけど。

ただ、Chromeのような動作は、一つだけ問題がある。Dynamic DNSを使った場合にそのアドレスが保証されないということ。モダンブラウザのDNS Resolverの動作でごねられた経験がある自分的には、Googleの実装方針を選べない。例えばActive Directoryなんて組んでいる環境で、ホスト名のIPアドレスがごろごろ変わってしまう状況があり得るイントラネットではこの実装は選べない。IPv6がやってこれば別だけどね。

2008-12-20

Android Dev Phoneがやってきた

土曜日にUPSからAndroid Dev Phoneが到着した(正確には金曜日に不在届けが入ってたのだけど)。なので、実質約1週間かかった。Android MarketのTrackingページを見ても、ずっと発送待ちのままだったんだけどね。

Softbank(Vodafone Japanのもの)のSIMを使って、アクティベート。APNを設定するのは[menu]を押さないといけないみたい。Nokiaとは違って、普通に日本語フォントが入っているので、AndroidのWebKitベースのブラウザでも日本語は表示されるし、GMailでも日本語メールを表示可能。

で、Terminalソフトを入れようと思ったけど、pTerminalがAndroid Marketから見つからない。で、別のソフトウェア "Terminal Emulator" を入れてみると、これでもCUIは利用可能。それでいろいろ見てみると、、、

  • cat /proc/cpuinfoでは、ARMv6-compatible processor rev 2 (v6l)
  • dmesg も見える
  • mount を使うと、ファイルシステムはyaffs2
  • su って使えるんだっけ?。使えるみたいだけど?
  • 存在しないコマンドはPermission deniedになるけど、suした後は、not found。

な感じ。

ガジェット的には、ちょっとちゃっちさがありありで、ポインティングデバイスもなんかすぐ壊れそうな印象。値段相応だな。

2008-12-16

Java Plugin for Windows x64

JavaのBug Databaseにこのようなバグのエントリがあったのは知っていたんだけど、最新のJDKのスナップショットには、64-bitのFirefoxで使えるJava Pluginが追加された。試しにインストールしてテストしたところ、ちゃんと64-bitのFirefoxでプラグインがDetectionして、ちゃんと使えるみたい。サンプルのアプレットを表示してみたところ、ちゃんと表示される。

というか、プラグインのコードの部分のパッチ用のバグ開いておかないとなぁ。

2008-12-13

Thunderbirdの返信ヘッダのカスタマイズ

返信ヘッダをカスタマイズするのには、片貝さんのところで説明されているようにするか、TB Quote Headerというアドオンを使うしかない。自分は、TB Quote Headerを使っていたんだけど、3.0 Beta 1にしたら、バージョンで弾かれて、直さないと動作しない。(Nightly Testing Toolを使ってもいいんだが)。

アドオン直すのもなんだから、Thunderbirdのコードでどうハードコードされているのかちょっと調べてみたところ、本来 reply_header_type = 4で固有のカスタマイズができるようにしようとした形跡があるんだけど、実際何も実装されてない。

会社ではThunderbirdを使っているし、ちょっと前に会社でその話題 ("〜さんは書きました"という風に出るのは、日本人以外に返信する時にまずいだろう) になってたので、bug 107884をやろうかと。っていうかパッチはもう作ってあるので、レビュー中だけど。

2008-12-04

Firefox 3.2?

Firefox 3.1のツリー (http://hg.mozilla.org/releases/mozilla-1.9.1/)が作成された。このツリーは、Firefox 3.1になるべきツリーで、Beta 2の後、Beta 3、RCと進んでいく予定のもの。毎度の事ながらチェックインには制限が与えられて、Approvalが必要になる。

で、FirefoxのUpstreamであるmozilla-central (http://hg.mozilla.org/mozilla-central/)ツリーは、Firefox 3.2という暫定的なバージョン用になって、ツリーがオープンされた。チェックイン待ちのコードが大量に入り始めているはず。

なお、ThunderbirdやSeaMonkeyで使っている、comm-central (http://hg.mozilla.org/comm-central/)の依存関係もmozilla-centralからmozilla-1.9.1に変更された。なのでEnlistingには注意が必要。

2008-12-01

iPhoneが売れている?はぁ?US市場しか見なすぎ

iPhoneの国別売り上げっていいデータがないので、古い記事を含め、いろんな記事を斜め読み。

From http://www.businessweek.com/magazine/content/08_17/b4081000500950.htm

As in the U.S., Apple (AAPL) cut exclusive deals in Europe so only one wireless carrier has the right to distribute the device in each country. It has three such contracts so far, with Britain's O2, France's Orange (FTE), and Germany's T-Mobile (DT). Strategy Analytics, a Newton (Mass.) consulting firm, estimates the three carriers sold a combined 350,000 iPhones in the fourth quarter last year, short of the consultancy's forecast of 500,000. It also estimates sales in the first quarter of 2008 dropped to 300,000. (There were 2 million iPhones sold last year in the U.S., where AT&T (T) is the sole carrier.)

ヨーロッパだと、初代 iPhone が、2007Q4 で、35万台、2008Q1 で、30万台。

http://www.canalys.com/pr/2008/r2008021.htmから、2007Q4でWorld Wideは、232万台。アジア (実際には香港?) で何十万台も売れるはずはないから、200万台弱はアメリカでの売り上げ。

で、特に、2008Q2のEMEA(要するにヨーロッパ)のデータ(http://www.canalys.com/pr/2008/r2008082.htm)を見ると、Othersの中でしかない。ということは、2008Q2は、Samsung(40万台)以下のセールスしか獲得していないということ。

また、http://www.canalys.com/pr/2008/r2008112.htmから、2008Q3 (iPhone 3G 発売時) の総売り上げは、World Wideで690万台。その流れからすると、約550-600万台弱がUSでの売り上げと予測される。

iPhone 3Gのスタートダッシュの情報(http://www.medialets.com/blog/2008/08/04/the-first-1-million-iphones-where-did-they-go/)からiPhoneの売り上げを見ても、ほとんどがUS。(国別で見れば日本は売れている方)。ヨーロッパ各国の売り上げのスタートダッシュを見れば、その後爆発的に売れたということはなさそうだから、良くてクオーター毎の売り上げはヨーロッパで30-50万台程度だろう。

また、ヨーロッパじゃスマートフォンが全く売れていないということではなく、ヨーロッパのスマートフォン市場で考えても、Nokia(Symbian/S60)が圧倒的。続いて、Windows Modile?。iPhoneが強いのはUSでしかない。

こう見てくると、小さいながらスマートフォン市場がある日本でiPhoneが売れないのは、ヨーロッパと同様で市場(需要)がそれだけしかないということでしかないと思う。

だから、携帯電話とスマートフォン市場って、ただ単にアメリカもガラパゴス、ヨーロッパもガラパゴスなんだよね。ただ中国は、アメリカというよりも、まさにヨーロッパとシェアが同一のパターン(Nokiaが市場をリード)なので、スマートフォン (携帯電話)においては、ヨーロッパの構造がスタンダードになる確率は高いとは思うが。

2008-11-11

Ubuntu AMD64 + ATOK X3

UbuntuへATOK X3を再インストールする時に面倒になったので、バグをファイルしておいた。

OSSのいいところは、一応バグを報告したというのが直接見えるところなんだが。コードを入れるとかという話になると、ある意味苦労が。。。

Bug #290533 : need libwrap.so.0 due to ATOK X3
https://bugs.launchpad.net/ubuntu/+source/ia32-libs/+bug/290533

2008-11-09

二つの出来事で時代が終わったなと感じる

時代が終わったなって思うことがあった。シスコの倒産と小室の事件。

シスコはよく行ったなぁ。ちょうど円高の時にレコードが700円くらいで買えて。店員はタチ悪かったけど、よくお世話になった。アルタのタモリシスコとハウス店が閉店したところでやばいなぁって思ったけど、案の上。。。

小室哲哉といえば、「今年ジャングルが来る」と言ってた発言だな。しかも95年に。日本のジャングル馬鹿は、「小室がそういう発言してたけど、ジャングルじゃなくて、オマエが来たじゃねーか」と言ってた。

まじめな話、Jungle (ジャングル) というのは、UKのRave MusicがHardcore (Altern8とか2 Bad Miscとか) と呼ばれるようになって、それが進化したもの。それがその後Drum'n'Bassへと変化してったんだが。Hardcoreが別の進化をしたのがHappy Hardcoreというのもあるんだが、まぁ、その音楽を作った張本人 (Slitmatt / LUNA-C / VIBES など) が飽きてしまうというグダグダ展開になる (そのジャンル自体はまだそこそこ残ってる)。

Jungle自体は、92/93年くらいからかな。Hardcoreのブレークビーツの要素をより弄っていったのがポイント。そのころのMoving ShadowとかReinforced、White House、Suburban Baseを聞けばどう変化していったのがわかる。日本の雑誌はテクノ馬鹿が書いてたので、Moving Shadowとかはふれてたけど、個人的には、Suburban Baseだな。一番重要なのは。今でもサイコー。

95年くらいになるとJungleのフォーマットというか、ブレークビーツを弄り倒すのではなく、ベースラインを変化していく、もうDrum'n'Bassのフォーマットになってしまってる。そのころはDrum'n'Bassと呼び始められた頃。それが今に続く。

その時点でJungleが来るって言われてもねー。少なくとも、UKのチャート見てたのは確実 (ちょうどあの発言があった頃は、SHY FXのOrigianl NattaとかRENKのSweet Loveとかって総合チャートインしてたからね。「これからレイヴが来る」と言ってた時って、Prodigyとかがチャートインしてたし)。ここで間違えてオランダチャートなんてみてたら、ガバ作ってることになったんかなぁ。KOMURO meets GABBER。それはそれでおもしろいが。

まぁ、小室が作ったJungleというのは、RENK Recordの劣化版って感じ。Jungle聞いた人が適当に作ってみましたって。フォーマットはJungleっぽいんだけど、明らかなPOPミュージックだった。だから売れたんだと思うし、そういう売れる曲を作るセンスは抜群だと思う

これはM-Beatの有名なやつ。でも今は聞くほどでもないね。現にOLDSKOOLのイベントで流れることもない。

2008-11-04

中国クオリティ

中国というか香港に行った時に聞いた話。

香港は地震がない場所なので、日本よりも高いビルとかがあるんだけど、その建築する時に作業員の足場となる作業場所ってのがビルの周りに組まれるよね。日本だと(低い建築物だと)パイプとかで組むんだけど、香港だと、を使うらしい。数十階建てであっても竹とのこと。雨降らないから竹で大丈夫とのことなんだけど、さすがだなぁと思った。

ただそんだけ。

ruby + openid でリアルにハマった初歩的なミス

Ubuntu 8.10上で、簡単なアプリを書くためにruby-openidを使おうと思って、今日ハマった初歩的なこと。

普通に、gem install ruby-openidでruby-openidをインストールして、 script/plugin install open_id_authenticationでopen_id_authenticationをインストールした後、script/serverでrailsのHTTPサーバーを立ち上げようとすると、

=> Booting WEBrick...
/var/lib/gems/1.8/gems/ruby-openid-2.1.2/lib/openid/store/interface.rb:9: Store is not a module (TypeError)
        from /usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
        from /usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `require'

というエラーを吐いて、WEBrickが起動できない。

理由はしょぼくて、

# dpkg --list | grep libopenid
ii  libopenid-ruby                             1.1.4-3
        Ruby library for verifying and serving OpenI
ii  libopenid-ruby1.8                          1.1.4-3
        Ruby 1.8 library for verifying and serving O

aptで古いパッケージが入ってたおかげでコンフリクトしてただけだったんだけど、ちょっと悩んだ。

2008-09-25

FedoraのUpdateが勝手にATOKのiiimf-serverを消した?

今日、tomcatのセキュリティアップデートが来てたからアップデートしたら、ATOK X3が使えない。ps auxを実行すると、どうもATOK関連とIIIM関連のプロセスがいない。rpm -qa | grep iiim とか実行してみてパッケージが入っているかどうかを確認したところ、iiimf-serverとかが消えてる。

なので、ATOKのパッケージからiiimf-serverと、iiimf-xをインストールしなおしたら、ATOK X3が使えるようになったのだが、原因はなんだ?

[管理] - [Update System] から Update Historyみたら、なんか消してるんですが。。。

消した覚えないから、勝手にFedoraのアップデートが消したってこと?scimをアップデートしているから、それが理由っぽいね。。。おいおい。

調べてみると、ATOKのページに以下のような情報がある。このページに書いてある対処をすることで、アップデートでiiimfを消さなくなる。

Fedora Core 6でのインストール方法(参考情報)
http://support.justsystems.com/faq/1032/app/servlet/qadoc?QID=030571

NokiaのWebサービスであるOviを使ってみた

MobileMeだとか、Google Phoneとか、各社WebとMobileを統合化したサービスが提供されてきているが、携帯電話の雄であるNokiaもovi.comというサービスをリリースしている。GMailとGoogle Calendar使っている身だが、ちょっと試してみた。

アカウント作成してログインしてみると、Contact(アドレス帳)、Calendar、Todo、Notesの管理ができるようだ。Webだけ使っても意味ないのでとりあえずデバイスを追加してみる。

[Add a devive]を選択すると、使用できる機種の一覧が表示されるので、自分の機種を選択。

なおアクティベートするコードはSMSで送られてくるため、SMS受信は有効にしておく。どっかのGoogleみたく、日本のキャリアへSMSが送れないということはない。

数分待つとSMSを受信する。そのメッセージを開くとPINコードを聞かれるのでページに表示されているPINコードを入力する。そうすると、[Menu] - [Tools] - [Sync]にOvi.comのアイテムが追加されるので、これを選択して[Synchronize]を選ぶと見事同期成功。日本語も問題なし(UTF-8使っているから当然)

ovi.com

2008-09-15

Windowsユーザーは64ビット版に移行すべき

会社の環境でも自宅の開発環境も基本はUbuntu or Fedoraの64ビット版を使っているのだけど、持ち運び用のPCはDellのXPS M1210にWindows Vista 64ビット版をインストールしている。ドライバが対応しているのに64ビット版を使わない人はたぶん人生でちょっとロスしていると個人的には思っている。(テレビでも見ない限り、普通のデバイスは64ビットドライバが存在するはず)

64ビットで一番の効果というのはメモリ容量とか言われているけれども、Windowsの場合は別にある。デスクトップヒープだ。32ビット版のWindowsではデスクトップヒープの量にはきびしい制限があり、60個くらいのNOTEPAD.EXEを起動すればデスクトップヒープが枯渇する

デスクトップヒープが枯渇すると何がおきるかというと、ウィンドウの文字が表示されない、ウィンドウ自体の作成に失敗するなど、画面の表示まわりに問題が発生する。Windows 95的に言えば、GDIリソースとUSERリソースの枯渇と同じことが起きる。

デバッグとかしている時には、秀丸エディタのウィンドウを30個開いている状態とかはよくあることだったんだけど、そんな状態だとデスクトップヒープが枯渇して、文字が表示されなくなってくる。それで必要のないウィンドウを探してクローズってことをしょっちゅうしてた。

そんなやっかいなことが64ビット版のWindowsで解決するんだから、速攻移行すべきだろう、特に開発やっているような人は。Vistaが嫌なら、XPの64ビット版(Server 2003と同一ソースコードのやつ)をインストールすればいいだけ。

ちなみに、Server版使っている人の場合は、Terminal Serviceを使っている場合は必ず移行すべき。セッションプールの制限値が明らかに違うので。

2008-09-10

word-breakの各ブラウザの実装

word-breakというCSS3 Textのドラフト (W3C Working Draft 6 March 2007) に入っているプロパティがあるのだけど、そのプロパティの各ブラウザの実装の違い。

このプロパティ自体は、Internet Explorerで実装されて、その後CSS3のドラフトに入ったもの。現在の WebKitでも実装されている。Firefox (Gecko) は、自分がバグオーナーで、コードのテスト中。

そこで各ブラウザの実装 (looseとbreak-strict以外) について調べてみた。

Safari 3.1 (WebKit)

日本語(CJK)はまったく考慮していない。WebKitは、IBMのicuライブラリを使ってラインブレーカーを行っていた記憶があるので、それに手を入れることはしていないんだろう。(Carbonにラインブレーカー用の関数があったのにそれを使ってないってところがAppleらしい)

Internet Explorer 7 (Trident)

これも変な動き。word-break: keep-allの時に読点では改行するのに区点では改行しない。句読点で改行すべきかどうかは、暗黙的な改行 (implied break points) ではない気がするから、微妙なんだが、どっちかに統一してほしい

どっちも微妙な実装だということはわかった。

2008-09-06

Google Chromeについての雑感

自分の経験上、独占からはイノベーションは生まれない。イノベーションは競争から生まれるものだ。リリース期間が長期化しているものは、基本的にプロジェクトが行き詰まっているものか(Windows NeptuneやWindows Longhorn)、そもそも何もやってなかったか(IE6->IE7なんて、2年以上の何もやってないような状況があったし)、どちらかとしかない。後者の例なんて、シェアをとったことでイノベーションが生まれなかった例だ (あの時のMicrosoftはやることなすこと失敗していることだね)。

現在のWebブラウザのイノベーションはGeckoやKHTML/WebKitから始まった訳だし、そのおかげでMicrosoftの彼らなりにイノベーションを起こそうと躍起になってきた。少なくともGoogleがWebブラウザ市場に参戦してきたことは、Webブラウザのイノベーションを加速させる意味でもいいことだ。Google Chromeもある程度は市場をとることができるとは思うけど、思った成果はでない気がする。モバイルであればもっとやれるチャンスがあるとは思うけど、S60やWindows Mobileに手を出すとは思えないんで、市場を握るまでには至らないかなぁと。

javascript shell for Tamarin-Tracing / NanoJIT

MozillaのJavaScript JITであるTamarin-Traingの開発用にJavaScript Shellが存在する。

ActionMonkeyの時は、xpcshellというのがあったが、今度はずばりjs。通常にビルドする場合は作られない(--enable-debugをしても作られない)ので、その作り方の話。

tracemonkey/js/srcに移動して、make -f Makefile.refと実行するとオブジェクトディレクトリに作られる。NanoJITの開発にはこれが使われるので、バグレポートする場合は、これで再現するテストコードを作ってもらえると、NanoJITの開発を行ったAndress GalとかDavidとかがすぐやってくれる。

2008-09-03

Mozilla Committer's Agreements V2

Mozilla.orgのコミット権限をとるには、昔はCVSアクセス権用のフォームを書いて、Mozilla.org (私の時はNetspace) に出す必要があったんだけど、そのAgreementが一新された。なので、元々コミット権限を持っている人も、再度サインして手紙で送ってくれってことらしい。

そういえば昔、その権限をとるにはリードクラスの承認が必要だったなぁと。そん時はBobJに承認もらったんだっけ。彼ら今何してんだろだろ。

2008-08-31

自分の作業レポジトリをMercurial Queueに移行した

いまいちMercurial Queue (以下MQ) の使い方がわからなかったので使ってなかったのだけど、週末に自分の作業用のレポジトリをMQに移行した。その際のメモ。

  1. 現在使っている自分自身のハードディスク内のレポジトリからパッチをすべて作成し直す。
  2. バグ毎にパッチを再作成。追加ファイルの場合は、先にhg addしておかないと、パッチの中に入らないので注意

  3. hg cloneをやるか、hg revertをやって、レポジトリをきれいにする。
  4. hg revertをやった場合は、*.origファイルができてしまうので、hg cloneで別のディレクトリにレポジトリのクローン使った方が楽(時間はかかるけど)

  5. hg qinitの実行
  6. .hg/patchesというディレクトリが作成される

  7. hg qimport -n <パッチの名前> <パッチのファイル名>をすべてのパッチに対して実行してパッチをインポート
  8. 先ほどできた.hg/patchesの中にパッチファイルが作成される。hg qimportだとパッチが当てられた状態にはならないので、必要に応じてhg qpushでパッチを当てる。-aオプションを使えば全部のパッチを当ててくれる。

思ったより簡単だった。hg pushなどをする時には、hg qpopでパッチを取り除いておけばいいだけ。

あと注意点として、hg qrefreshでパッチファイルを更新する際、追加・削除のファイルがある場合は、hg qrefreshする前に、hg addhg removeなどを実行しておくこと。この動作にちょっと悩んだ。

2008-08-30

TraceMonkeyの話パート2

AdobeというかMozillaというかFirefox 3.1に入るJavaScript JITの話の続き

mozilla-centralにコードは入ったのだけど、常用にできる状態では当然ない(もちろんデフォルトでOFFにされている)。NanoJIT自体は、x86 / x86_64 / ARM (Thumb) をサポートしているのだけど、x86 以外は確実に落ちるはず。もともとtracemonkey自体は、tamarin-tracingのnanojitのコードをmozillaのactionmonkeyに持ってきているんだが、ようやくx86だけは動く状態なだけ。x86_64とかARMは、ただコードがあるだけだし (ARMがあるのはFlash LiteがARM上で動くからだったはず)、x86_64のコードなんてCalling Convertionから間違っているからね。

Nanojitのコードを追っかけたい人は、mozilla-centralの方じゃなくて、tracemonkey側を追っかける必要がある。現在こっちのツリーでバグフィックスしまくりなので。

2008-08-24

TraceMonkey (JavaScirpt JIT)のコードが入ったわけだが

nanojitと呼ばれているJavaScriptのJITエンジンのコードが、Firefox 3.1a2に入ったわけだが、ベンチの結果を見るとブレがある。

ちなみに、x86用のみで、x86_64は、以下のように変更すれば、有効にできる。

diff --git a/js/src/Makefile.in b/js/src/Makefile.in
--- a/js/src/Makefile.in
+++ b/js/src/Makefile.in
@@ -82,19 +82,22 @@ PACKAGE_FILE = js.pkg
 # other modules which are always built shared. Failure to do so results in
 # the js code getting copied into xpinstall and jsd as well as mozilla-bin,
 # and then the static data cells used for locking no longer work.
 
 ifndef JS_STATIC_BUILD
 FORCE_SHARED_LIB = 1
 endif
 
+ifeq ($(OS_TEST),x86_64)
+DEFINES += -DAVMPLUS_AMD64
+NANOJIT_ARCH = i386
+ENABLE_JIT = 1
+else
 ifeq (86,$(findstring 86,$(OS_TEST)))
-ifeq (64,$(findstring 64,$(OS_TEST)))
-else
 DEFINES += -DAVMPLUS_IA32
 NANOJIT_ARCH = i386
 ENABLE_JIT = 1
 endif
 endif
 
 ifeq ($(OS_ARCH),Linux)
 DEFINES += -DAVMPLUS_LINUX -DLINUX

なお、nanojitの日本語でかかれた話は、http://dodgson.org/omo/t/?date=20080506に書いてあるのがおすすめ。

WebKit(SquirrelFish)もMozillaもJITをランディングしてきたけど、Microsotはどうするのだろうねぇ。IE6の後にインドに左遷されたスクリプトエンジンだし(だから独占はイノベーションを生まないんだ)。インド人仕事じゃ高速な実装できるはずないから、Microsoft Rearchくらいから出してくるんだろうけどさ

2008-08-19

jemallocのパフォーマンス

Firefox 3でJavaScriptの速度向上に寄与しているのは、jemallocが要因の一つなんだけど、x64でjemallocのビルドテストができるようになったので、それでベンチマークをとってみた。

3.0と3.1のツリーの違いがあるけど(3.1もチューニングの段階まできてないし)、予想通り、jemallocを有効にしただけでx86よりもJavaScriptのベンチマークの結果が良くなった。

2008-08-10

iPhoneのアクセスポイントもバレたようで

予想通り、iPhoneのAPN名やパスワード等の情報を破られているようだ。NTT Docomoからリリースされればおもしろいことになっていたと思うけど、そういうことを嫌うDocomoなので、iPhoneがDoCoMoからリリースされる可能性はやっぱり低いね。

2008-08-09

Firefox MOD?

2chのスレッドを見てたら、Firefox MODビルドというものがあるのかということを初めて知った。 そこで、人気になってるのは、mmoy / ayakawa / tete の三つらしい。

mmoyはたまにメールが来るので、Windows x64用のパッチとかを渡してる。(実際、mozilla-centralのツリーのものは、自分のハードディスクの中しかないんで、ブランチを公開しておこうかなぁと。)

ちなみにx64版がOfficialのx86版より若干遅いのはおそらく、jemallocが有効じゃないから。それを有効にすればJavaScript系のベンチが跳ね上がる。jemallocを有効にするためには、MSVCRTのソースをいじらないといけないんだけど、amd64版のCRTのソースは、Professional Edition以上にしか入ってないってことは最近初めて知った。エディションの比較にそういうことをちゃんとしてほしいんだが、DPEの奴らじゃそんな仕事はしないだろうなぁ。

あと、CairoのMMXが使えないのとJPEGデコーダー(IJG LIBJPEG)のISLOWがSSE2じゃないというところが若干遅くなるポイント。(アルファブレンディングなんて、地道にCPUで計算するんじゃなくて、すべてをGPUに任せた方が速いんじゃないかとずっと思ってはいるんだけど)。

JPEGのは、自分のツリー上ではSSE2版のコードを書いてあるので、それはDoneしてるのだけど(15%はデコーダーのスピードはアップする)、3.1のツリーでMichaelがJPEGデコーダーの部分に手を入れようとしてるので、それがcheck inされてから、ちょっといじらないといけない。(IFASTへの変更+α)

AP-945のベンチを見る限り、 SSE2のパワーが生かされるのは、Pentium 4またはCore 2 Duoだけのようだけど(SSE2の整数演算はMMXを二回実行してるだけだし)、Phenonmもここの記事を見る限り、AMDの以前のCPUとは違ってSSE2速そうだから、Phenonmをそろそろ買ってみようかなぁと。デスクトップなんて、Socket939のAthlon64 X2 3800+のままだし。

さてどうしようか

2008-08-03

Optimization

OS X ハッキング! 286 "脱獄"後のお約束、各種ベンチマークを測定

今回使用したベンチマークテストは、描画や各種I/Oの測定は含まないものばかりだったが、1つハッキリしたことがある。それは、現状のままでは FlashやJavaを快適に利用するには厳しいということ。Appleの思惑のほか、ライセンスなどパフォーマンスとは直接関係しない問題が含まれるため、事態はそれほど単純ではない。しかし、移植が順調に進んだとしても (モバイルSafariとともに) 余裕でサクサク動くようになるとは考えにくい。

ARMの方を持つ気はないけど、Nokia N82 (ARM 11 Dual CPU / 332 MHz)でFlashやJavaなんてサクサク動く。Nokiaのケータイであれば、DSPを内蔵しているというのもあるけど、画面サイズの動画レベルであればストレスはない。この位のCPUパワーがあって、この画面サイズで、でもパフォーマンスが、、、って言っているのは(Appleが)最適化をまともにできないからでしょ。日本のケータイ(ARMがほとんど)だって、iPhoneくらいのパワーのCPU積んでないし。

2008-08-01

日本のケータイはiPhoneを学ぶ必要はない

自腹でヨーロッパからNokiaのケータイを買っているような自分だけど、以下の発言は正直微妙。

404 Blog Not Found:iPhoneがガラパゴスケータイより劣っていていい理由
http://blog.livedoor.jp/dankogai/archives/51089462.html

iPhoneのようなやり方が通じるのは、一部のユーザーのための高機能ケータイのみ。それはほかのメーカーも含めてそうだ。

自分の使っているNokia N82なんて、PC接続でファームのアップグレードが簡単で、買ったときに比べれば、(iPhoneでだって動かない) Flash Liteが3にアップグレードされる(YouTubeも楽々)は、マップアプリであるNokia Mapもバージョン上がったりなどしてる。

アーリーアダプタ層以外には、そういうやり方をすれば、買ったときにまともに動かないという悪いイメージを持って、次の買い換えの時に悪い印象を持つだけ。一方、Nokiaの一般向け廉価モデルはアップグレードなんてなくて、(Bug Fixはあるけど) そのままの数年売られている。そういう売り方がNokiaのビジネスを支えているんだが。

だから個人的には、Appleのやり方はAppleの信者・イメージがあっての売り方であって、日本のメーカーがやるべきやり方ではない。学ぶものは、Nokiaや韓国メーカーのやり方。その方が自分たちにあっている

そもそも日本のケータイの伸び悩みは、そもそもドコモなどの日本のキャリアの戦略が時代に合わなくなっているだけで、そのキャリアにおんぶに抱っこだったケータイメーカーがコストの増大に耐えられなくなっていることが現在のいろいろなメーカーの撤退につながっている。キャリアに依存せずに自分たちで売るノウハウがないことが海外で失敗している理由。

たとえば、ドコモやauのCM見てると新しいケータイが出たということはわかるんだけど、どういうケータイが出て、どのケータイだとこういうことができる・できないという商品説明の基本がないので、何売りたいかわからない。なぜ自分たちでブランド作りができないのか歯がゆく思う

彼らがこのチキンレースから抜け出したいのであれば、自分たちのブランドを確立して、キャリアに依存しない売り方をやらないと、その泥沼からは一生はい上がれないかと。そんなとこ

2008-07-17

アパホテル@神戸三宮は、VPN張れない。。。

出張が長引いているため、アパホテルに泊まってみた(ネットの割引が安かったので)。

施設はきれいなのだが、先日まで泊まっていたの東急インに比べて(同じ値段で)、部屋が狭い。テレビはブラウン管だけど、どうもケーブル?経由で地上波デジタル+BS。

一番いただけないのは、有線LAN。ポート制限しているらしく、OpenVPNでのVPNが使えません。仕事にならねー。

2008-07-14

東急イン@神戸

今週も神戸。出張なので宿泊料金の価格制限があるんだが、今度は三宮の東急インに止まってみた。

このホテルのネットワーク環境は有線LAN。OpenVPNもちゃんと使える(エライ)。さすがに先週止まったホテルよりも広く、ズボンプレッサーも部屋に装備。ただ、有線LANの口がベットのそばになっているので、机で作業するにはちょっと向かない。

2008-07-09

神戸の無線LANの使えるビジネスホテル

仕事で神戸にきているんだが、(値段の制限もあるので) 安くてネット環境がある北上ホテルを選んでみた。

ネットワークは、無線LANが使えて、以下のようなプライベートアドレスが振られる

wlan0     Link encap:イーサネット  ハードウェアアドレス 00:19:d2:00:81:a6  
          inetアドレス:192.168.99.21  ブロードキャスト:192.168.99.255  マスク:255.255.255.0
          inet6アドレス: fe80::219:d2ff:fe00:81a6/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:20294 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:19615 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:15756131 (15.0 MB)  TXバイト:2836271 (2.7 MB)

ポート制限があるかと思ったら、OpenVPNが使えるので、助かった。

あと、アメニティはベタに歯ブラシ、ボディソープ、リンスインシャンプー。設備はよくもなく悪くもなく、まぁビジホの通常パターンというところ。

それよりも、こんな時期に出張のおかげで、ツールドフランスが見えないのが、痛いんですが

2008-06-28

ここ最近の作業

Acid3のTest70に対してのパッチ

Mozillaのパーサーが不正な文字コードのXMLに対してエラーを投げないのは元からしってたけど、それXMLのスペック違反だよねって話。これを調べてみてわかった話がこれ、Bug 174351。オーナーじゃないからレビュー出してない。

そもそもIUnicodeDecoderの実装の動きが文字コードによって違う。UTF-8だと不正な文字が見つかった時点でエラー終了なんだけど、それ以外は違うんだよね。って、そこは元々Frankが実装したどころだっけ?

RFC2640サポート

WorkItemバグとして昔ファイルしておいたけど、離れた数年間で誰も修正してくれなかったやつの一つ。Dougと話中

Breakpad

Google-breakpadというエラーレポーターがあるんだけど、そのダンプの生成方法について、いろいろ直そうとしてる。というのも、今のLinuxクライアントのコードはx86にべったりしすぎなコードになってて、他のプロセッサへのポートが困難。

2008-06-25

CentOS 5.2がリリースされた

RedHat Enterprise Linux 5.2が出てから約1ヶ月たったけど、そのクローンのCent OS 5.2がリリースされました。

http://lists.centos.org/pipermail/centos-announce/2008-June/014999.html
Updating from CentOS-5.0 and 5.1

If you are already running CentOS-5 ( either 5.0 or 5.1 ), all you need to do is run : "yum upgrade" on your machine, and that will bring in the new packages from 5.2 and update your machine. Note that the command required is 'upgrade' and not the usual 'update'. Refer to the yum man page for details on how those two differ in operation.

Should the CentOS-Base.repo file on your existing CentOS-5 install be modified, you might need to pay more attention to the output from the 'yum upgrade' command. If the following command produces no output, your CentOS-Base.repo file is intact :
rpm -V centos-release | grep CentOS-Base

2008-06-14

NSS 最適化 for x86 (VC++)

Bug 439199 - Enable SSE2 for MSVC++

Microsoft Visual C++を使っている場合にSSE2の最適化コードを使ってないので、それようのbugを開いた。NSSなんて、wtcやnelsonといったレスポンスの悪い人たち相手なので、すぐチェックインができるわけでもないし、Thunkツリーに入れるので、Fx3.1とかで使うコードになるかどうかは微妙だけど。

それはそうと、GCCを使っている場合は、NSSでSSE2の最適化コードが使われるんだけど、それって、Intel CPUじゃないと動かないのね(Intel以外は無効にしてる)。今初めて知った。

Firefox mobile for iPhone?

Mobile系をやっているBradのツリーをみてたら、arcticfoxの名前が?

どうみてもiPhoneへのポート用にしか見えないのだが。

Yahoo vs Microsoftの考察

今回の買収話ってのは、おそらく後ろで提言したのは、Kevin Johnsonらへんじゃないかなぁって思うんだが。彼がLive担当になって(今はどうだか知らないけど)出した結論が、今のようにLiveをやってても勝てないということかと。

Yahooに話を持って行って、それがダメになるのは重々承知でなおかつ、それが失敗したとしてもYahooという会社の存在価値をもなくす魂胆だんたんじゃないかなぁと。プレーヤーが1つ減るということは、ある意味チャンスでのあるから(米国だとGoogleに全部持っていかれる危険性があるが。ただ、そうなると独禁法の関係で、Googleが米国政府 (EUも含めて) 管理下におかれて、やりたいように出来なくなる。ある意味Googleにとってもおいしくない部分になる。MicrosoftがAppleを泳がせたように、GoogleにとってもMicrosoftを泳がせないといけない)。

Microsoftのダメなところは、Windows NTやSQL Server、Exchange Serverで見せたような粘りがLiveに見られないところ。Liveチームはある意味ぬるま湯でもあると言われていたから、どうしようもない機がするけど。ヨーロッパらへんのベンチャーを買って、そこを本拠地で立て直すのが賢明かと思うよ、実際。

2008-06-10

TrackerでThunderbirdメールの全文検索

とりあえずメモ書き程度。Fedora 9上の話だけど、Ubuntuでも大丈夫かと。

  • TrackerのLatestのツリーに入っているtracker.xpiを持ってくる。(ここにtracker_1097.xpiを置いておく)
  • Thunderbirdのアドオンなので、[ツール(T)] - [アドオン(A)]からこのxpiをインストールして、Thunderbirdを再起動
  • [ツール(T)] - [Tracker indexing settings]で、[Enable indexing]を有効にする

待っていれば、自動的にインデックスが作成されて、Trackerのツール上で検索ができるようになる。

制限事項

  • 日本語検索はできることはできるが、日本語文字列に対してTracker自体のワードブレーカーが上手く働かないので、検索の精度は悪い。これはTracker側の問題なんだけど。
  • 古いバージョンのtracker.xpiを持ってくると、Subjectとかがデコードされない。なので最新版を持ってくる必要あり。

2008-06-07

はじめてのmozilla-central - check in編

mozilla-centralに移ってから、初のチェックイン。とりあえずメモ書き程度に残しておく。

とりあえず、hg commitで変更をローカルへコミット。本当は、-mをつけてログをコマンドラインで書く方がベター。

makoto@localhost:~/Development/mozilla-hg/mozilla/xulrunner$ hg commit app/xulrunner.exe.manifest stub/xulrunner-stub.exe.manifest

ちなみにコミット内容は、これ。

makoto@localhost:~/Development/mozilla-hg/mozilla/xulrunner$ hg log -l 1
changeset:   15286:039430d96985
tag:         tip
user:        Makoto Kato <m_kato@xxxxx>
date:        Sat Jun 07 08:14:56 2008 +0900
summary:     Bug 437046 – Support x64 for xulrunnder.exe.manifest. r=ted.mielczarek

ローカルにコミットした後、hg pushで本体のmercurial serverへコミット。

makoto@localhost:~/Development/mozilla-hg/mozilla/xulrunner$ hg push
Enter passphrase for key '/home/makoto/.ssh/id_dsa': 
pushing to ssh://hg.mozilla.org/mozilla-central/
searching for changes
remote: Could not chdir to home directory : No such file or directory
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 2 changes to 2 files

これで終了。cvsの時に比べればhg pushのような作業が増えるけど、ローカルにリポジトリを持っているので作業効率がいい。

OpenOffice CVS

会社でOpenOfficeを使ってて、納得いかないことが多々あったので、ちょっとコードを持ってきてみた。コードも巨大だけど、うまくまとまってないコードにしか見えないなぁと。ビルド環境作るもの大変そうなのは、閉口状態。

そう言えば、あの会社のOfficeアプリケーションもビルド環境作るの大変という話を聞いたなぁ、そういえば。

CentOS 5.2

So when can we expect CentOS 5.2 then, well using the same 3,5 weeks we end up with a date of around June 14th 2008. This is of course a estimate it can be later or earlier.
http://misterd77.blogspot.com/2008/05/centos-52.html

Redhat Enterprise Linux (RHEL) 5.2がすでにリリースされていますが、それのコピーのCentOSも、5.2が6月14日くらいにリリースされそう。今度借りようと思っているレンタルサーバーはこれでも使おうかなぁと。

2008-06-05

職場環境を満足させる手法

Googleをまねて、いろいろな会社が社員の働く環境を良くしようとしているが、とある会社の場合でのこと。

椅子が老朽化してたので、会議室の椅子がVitraのに変わる -> 満足せず
椅子が老朽化してたので、各個人の椅子がハーマンミラーのアーロンチェアーに変わる -> 満足せず

ここらへんで、豚に真珠という言葉が。。。(家で使っているVitraの椅子って10万くらいしたよ...)。で、こりずに

全ミーティングルームにプラズマ (プレゼン用) を設置! -> 満足せず
じゃー、社員専用のスターバックス! -> 値段が高いといって満足せず (ドリンクは割引だったんだけど)
試しに無料のバナナを置いてみる -> 大満足。ファシリティの満足度急激アップ
(バナナ以外の順番はちょっと違うんだけどね)

結局、ファシリティの満足度を上げるベストプラクティス (あの会社が好きそうな言葉) は、無料でバナナを配置するだけだったという。。。価値のわからない人に高価なものを渡しても、それは職場環境の改善にはならないわけで、誰もがわかりやすいものを与えないと、その費用は無駄にしかならない。

まぁこの後、バナナのおいてある場所が悪い (取りに行きづらい) だとか、各営業所にも置けとかいう意見が来たのは言うまでもない話だけど。

2008-06-03

ARMでもFirefoxがコンパイル可能だけど

ARMのマーケティング側の人間からはFlashもFirefoxも動くという話はでるが、それは正しい。Mobileで考えてもFlash Lite 3がNokiaのS60 (CPUはARM) でも動いているし (Nokia Web Browser上で、YouTubeを見ることができる)、N800/N810もOSは、LinuxだけどFlash動くし。(日本の携帯電話だって、大多数がARM系なんだしね)。FirefoxもARM Linux (というか、N800/N810に乗っているWebブラウザって、今はFirefox 3ベースのもの)でも動く。

ただ、ARM用の最適化なんてしてないけど。

Intelがしきりに優位性を話すx86のプラットフォームだと、いくつかのレイヤーに対しての最適化が入ってる。

  • Cairo 1.6のpixmanにおけるMMX最適化。SSE2の最適化は次のバージョン
  • SSL等に使われるnss/freebl。mpiのコードは、x86/x86_64はアセンブラで高速化を図っている。GCCプラットフォームだとSSE2も使ってる

Firefoxにおけるx86最適化の部分はこれだけ。後はコンパイラがどういう風にコードを吐けるかがポイント。ほかのブラウザを考えてもその最適化は似たり寄ったりだけどね。ARMとx86のコードにおけるポイントは、コンパイラによるところが大きい。ARMだとatomic系の実装が面倒というのもあるけどさ。

世の中のインターネットデバイスで必要とされているものって、Flashサポートと各コーデック(h264など)くらいだから、どのCPUであってもパワー効率がよければどれ選んだって構わないと思う (Windows Mobileというか、Pocket PCがARMになったのもiPAQがヒットしたおかげで、ARM以外やらねぇって決めただけの話だし)。コーデックに関してはDSP経由でやれば、ARM上だってそこそこ速いんだけど (今のTIのプラットフォームなんてDSP込みみたいなもんだし)、情報がなさすぎだし、ARM上でのプラットフォーム間の互換性の問題にぶち当ってコストに跳ね返る。どっちもどっちだな。。。

mozilla-central がオープンしたわけだが、、、

mozilla2 (Firefox 3.x / 4.0等) 用のMercurialツリーのmozilla-centralがdeveloper向けにオープンしたんだけど、 試したところ、

  • mozilla/security を作成しておかないと、エラー
  • mozilla/js/tarmarin を作成しておかないと、エラー

という初期トラブルはあったものの、動いている。

ちなみに、

NSPRやNSSなどは、もとのCVSのままなんて、CVSと併用することになる。(client.pyはその辺を考慮しているが)

2008-06-02

Mac OS X版のCairoはATSUIなんて使ってない

以下の記事を見て、倒れた。。。

「爆速! Firefox 3登場」直前 - Mozilla Party JP 9.0開催
http://journal.mycom.co.jp/articles/2008/06/01/mozillapartyjp9/index.html

Gecko 1.9のCairoは、1.6.2 (w/ pixman 0.10) ベースを採用しているんだけど、これは、ATSUI (Apple Type Services for Unicode Imaging) のサポートを止めたバージョン。なので、コードを見ればわかると思うけど、ATSUIを使っているなんて記述はありえんはず。PangoのQuartz Backendじゃあるまいし。 そもそもATSUI自体がobsolutedなものなので、それをやめて、Cairo 1.6ではCoreText (CGFontベース) に変えてる。そもそもATSUIはCarbon時代のAPIセットだったはずで、64bit版のMac OS Xじゃサポートされてないはず。(SDKを確認したけど、64ビットサポートはない)

そもそもメールを掘り出すと、2008/3/17にVladimirがこうポストしてる。

Here's a patch that renames the current ATSUI font backend to a Quartz font backend, in preparation for eventually dropping the ATSUI dependancy internally and using CGFont directly. This patch makes --enable-quartz give you both quartz surface and quartz font support; otherwise, I would've needed to use "cairo-quartz-font.h", breaking the usual pattern. I also can't think of a reason to compile with just one of those -- even if you only use one or the other, it won't hurt to have them both available (since they have the exact same dependencies).

というか、そのチェックインしたVladimirはmozilla.comの人じゃん。。。

2008-05-31

最近のトレンド話

たまにはFirefoxの話。

  • Firefoxの次 (3.1か3.5かは決まってない) からは、mercurial (hg.mozilla.org) に移行はする。
  • Tinderboxとかの作業が終わっていないため、Developerは、mercurialのツリーにチェックインはまだ不可能
  • Firefox 3.01は、CVS (cvs.mozilla.org) のまま
  • Thunderbird 3は、どのツリーで出すかは決まってない。おそらく、Firefox 3.xと同じツリーでいくはず。
  • Thunderbirdのチェックインは、今のところCVSの方。mercurialがオープンされれば、そっちの予定?
  • Firefox Mobileは、mercurialのツリーで、UIを作ってる。実態は、xulrunnerにFirefox Mobile用のUIをかぶせる方向
で、Curretn Work
  • NSSのfreebl/mpi (暗号系で使っているコード) の最適化がしょぼいので直せる部分をやってる
    • LinuxとかのGCC系用コードがインライン使ってない。md5が2-3%は速くなるし、sha512なんて、x86_64だと約10%速くできる。これはNelsonにレビューを投げてる
    • VC++ (x86) の場合のmpiのSSE2最適化が抜けてる。ちょっとテスト中
    • Windows x64でアセンブラよりコンパイラの最適化の方がはやい (RC4)。なぜ?
  • どうでもいんだが、directory sdkのconfigureって、x86_64だと、x86として認識してる。実害はないけど。。。

3G iPhone in 日本市場

そろそろiPhoneの日本上陸についての記事が出始めているが、日経新聞とかならまだしも、IT系メディアが書く記事もピントがずれているので、技術的な視点での話でのどのキャリアで発売されるかの考察。

電波仕様

KDDIは、CDMA2000でかつ独自の周波数帯を使うデザインのため論外。そもそも韓国・アメリカのCDMA2000とも互換性なし。NTT DocomoとSoftbankは、UMTS2100サポートなので、その線しかない。イーモバイルは1.7GHzの独自周波数帯なので無理。

アクセスポイント(パケット通信)

Docomoの場合

i-modeネットワークではなく、mopera Uで使っているようなGPRSネットワークを利用の線が濃い。NokiaのS60端末 (NM850i/NM705i) のように端末メーカーがコードを書くだけで、i-modeネットワークに接続できるようだけど、そんなi-modeのためだけにコードを書くような会社ではAppleは決してない。そもそもi-modeネットワークに接続できない端末は、Motorola M1000以外に正式に小売りに出してない。そういう端末をリリースしたときのサポートコストをドコモショップが背負えるのか。WiFiも内蔵している点を考えれば、mopera必須のサービスになることは間違いない。(定額プランもmopera用のものがあるし)。だから、i-modeはなし?。

Softbankの場合

Xシリーズと同様にopen.softbank.ne.jpを使うだけ。おそらく型番もXシリーズ。Apple側としては基本的にソフトウェア調整がいらない。SMSもあるし、パケット通信も制限がないし。

メール

もし、iPhoneのファームが国際標準のMMSへの対応してるのであれば、そもそもSoftbank以外を選択する理由などない。Softbankだったらアップル側でアクセスポイントの設定以外何もする必要はない。ドコモの場合だと、mopera U経由でPOP/SMTP?しかありえん。日本の一般層に売るのであれば、i-modeメールは必須だけど、それを実装してくる可能性はきわめて低い。2G iPhoneのようにファームがMMS対応してなければ、SMS+POP/SMTPなので、どっちにしても変わらない。(X01HTの時みたいに誰かがMMSクライアントのコードを書くだろうから、使えるようになるかもね)

結論

ドコモを選ぶ利点はシェアのみなんだよなぁ。欠点ありすぎ。

日本市場で売り込みに来たNokiaみたく、i-modeに対応させ、穴をふさいで(ROMのドライブのみアプリケーション起動可能の状態) S60アプリケーションのインストールをできなくすることをしてくれれば、ドコモにとっては都合がいいけど、Appleがやるとは思えない。もしi-modeに対応してきたとしても、ネットワークの情報がオープンにされてしまうだろうから(2G iPhoneのようにセキュリティホールから100%破られると思う)、そのリスクをドコモが背負えるのかなぁと。。。。Softbankはそれをわかってて、Xシリーズという別シリーズを持ってきているし、現にX02NKのような、そういう端末はすべてXシリーズにしようとしているのだろう。

そもそも、日本のケータイがガラパゴスなのは、端末スペックがというよりも、ソフトウェア側(インフラ)がガラパゴスな点なんだ。ハードウェア的に日本の端末は優れているとは思うけど、ソフトウェア側が日本独自にせざるを得なくて、その結果コストがかかっていることが重要。

i-modeネットワークに対応する端末側のコードを書いたとしても、それは、日本の端末でしか使えないコードになる。Softbankの場合は、User-Agentとかで制限をかけているとはいえ、そもそもワールドワイドで使われている国際標準の仕様 (GPRS/MMS) をベースに使っているから、ガラパゴスな状態ではない。だから海外でUMTS2100サポートの端末を買ってこれば、それはSoftbankのネットワーク上でパケット通信は動作するし (MMSだってアクセスポイントの設定をすれば関西では使える)、3G iPhoneがSIMフリーでリリースされれば、Softbankで使える。X01HTの時みたいに誰かがMMSのコードを書くだろう。

もし、SoftbankがJ-Phoneのままだったら、ドコモと一緒で独自スペックを採用してたとは思う(V-SA801とかみてればそんな感じでしょ?)けど、ある意味Vodafoneに買収されたことが、ワールドワイドスペックを採用できた要因になったのではと思う。日本のユーザー/開発者にとって、その買収劇は非常によかったことだったんではないかと感じてる。

Firefox Mobileの話だって、日本の端末だとWindows Mobile端末以外、実質不可能。(SoftbankのS60端末はありだけど、mozilla.comのOfficialにはやる気なし)。結局のところ、日本だけイノベーションに取り残されていくだけなんだよね。i-modeで採用されているCompact NetFrontにイノベーションを感じることはないし。

まぁ、もちろん独自スペックじゃないために、いろいろとビジネス上の問題 (SIMロックを外されて売られる) があるが、それは別問題。まぁそれはKDDIとドコモが4Gへ喰らう話でしょう。

2008-05-29

FOMA USB OBEX for Linux

勉強がてら、openobexにFOMAのUSB OBEXを追加してみた。いくつか問題があるので、まだパッチを本家には入れないけど。パッケージは、Fedora 9のx86_64用なので、SRPMも置いておく。

使い方

UUIDの解析はしてないのでobexftpは使えません。使えるのはobex_testのみ。obex_test -uを実行すると、使えるインターフェイスを表示するので、それを使ってobex_test -u 0なんて実行すれば、接続できます。

対話式インターフェイスになるので、cで接続して、gでvcfファイルを取得できます。受信後、dで切断して、qで終了するだけ。ファイルの取得は一回目だけ失敗しますので、二度やってください。

2008-05-21

Fedora 9でATOKX3を使う

会社のPCをFedora 9 (fc9 AMD64) にアップグレードしたら、ATOKX3が使えなくなったのでメモ。x86_64だからかと思ったけど、そうでもないらしい。

まずは、rpmパッケージがちゃんとインストールされているかを確認して、入ってなければインストール。

[user@localhost /opt/atokx3/lib/client]$ ls /etc/X11/xinit/xinput.d -al
合計 44
drwxr-xr-x 2 root root 4096 2008-05-21 10:10 .
drwxr-xr-x 5 root root 4096 2008-05-21 11:09 ..
-rw-r--r-- 1 root root  277 2008-05-21 10:09 iiimf.conf
-rw-r--r-- 1 root root   86 2008-04-29 13:04 none.conf
-rw-r--r-- 1 root root 1463 2008-04-02 16:27 scim.conf
-rw-r--r-- 1 root root 1143 2008-04-29 13:04 xim.conf

iiimf.confを以下のように変更

XIM=iiimx
XIM_PROGRAM=iiimx
XIM_ARGS=-iiimd
GTK_IM_MODULE=iiim
QT_IM_MODULE=xim
# gnome-im-settings-daemon >/dev/null

export HTT_DISABLE_STATUS_WINDOW=t
export HTT_GENERATES_KANAKEY=t
export HTT_USES_LINUX_XKEYSYM=t
export HTT_IGNORES_LOCK_MASK=t
export JS_FEEDBACK_CONVERT=t

あと、atokx3start.shをログイン時に起動するようにする。

  1. [システム] - [設定] - [ユーザー向け] - [セッション]を選択
  2. [自動起動するプログラム] の [追加] を選択
  3. [名前]に適当にatokx3start.sh、[コマンド]に、/opt/atokx3/bin/atokx3start.sh
  4. ログアウトして、ログインし直す

としたら使えるようになった。

2008-05-17

Totemがフルスクリーン表示でおかしくなる

バグは後からファイルしようと思っているけど、Ubuntuに入っている動画プレイヤーのTotemがフルスクリーン状態で終了してしまうと、次の起動時からそのサイズでウィンドウを開こうとしてしまい、ウィンドウのサイズ変更ができなくなるバグがある。 こういう状態の時の対処方法は、以下のようにウィンドウのサイズを記憶しているファイルを削除することで直る。
rm ~/.config/totem/state.ini
Totemのファイルって、.gnome2配下じゃないんだ。。。

Ubuntu 8.04 (AMD64) で ATOKX3 が起動しなくなった

OSを再起動したら ATOKX3が起動しなくなった。調べてみると、32bitのライブラリがなくなっている。そういえば、ずっと昔にapt-get autoremove 実行した覚えが。。。 ということで、AMD64版のUbuntuを使っている人は気をつける必要がある。起動しなくなったら、とりあえず、apt-getでia32-libsをインストール。
sudo apt-get ia32-libs
これで、iiimdとiiimxは起動するようになった。(Justのものに入っているIIIMDが32ビット版なので。次のATOKX4が出るのであれば、64ビット版も入れてほしいなぁ。)

2008-04-28

x64でのパフォーマンスチェック Windows版

最近Michel君にx64のパッチをあげたんだけど、Firefox 3上でのパフォーマンスが出ないということを言われたので、気になって調べてみた。今回も当然Dromaemo。--enable-optimize=-Oxでビルド。x64はこれ以外の最適化ビルドオプションを使うと落ちます(生成されたコードを見る限りたぶんコンパイラのバグ)。

確かに。最近使っているDellのノート上だとパフォーマンスが出てない。

で、Althon 64 X2だとどうなるんだろと思って、(まったく調査にもならないけど、試しにということで) VMWare上で調べてみる。

VMWare上で見てるから、比較なんて意味ないんだけど、やっぱりCore 2 Duoってx64モードで遅いの?。遅いかもという話は聞いていたんだけど、もう少し調べてみないとわからないけど。

2008-04-19

Firefox JavaScript パフォーマンス (x86 vs x64)

気になったのでDromaeoを使って32bitと64bitのベンチマーク。テスト環境のCPUは、AMD Turion 64 1.8GHz

64bitだと比較的いいパフォーマンスが出ているようだ。x64の方は、Ubuntuのビルドで、x86は、公式のビルドだから、ビルドのチューニングという点では数字が正しいとはいえないかもしれない。また、64bit上のLinuxで調べているので、OSとして32bitの方がコンテキストスイッチのコストが低い分、32bit上のOSで動かせばもっといい数値がでるかもしれない。

なのでこれはあくまでも目安のデータ。

Ubuntu 8.04 で VirtualBox-OSE が起動しない

Ubuntu 7.10でも同様に起動できなかった(ハングアップしてた)んだけど、原因がわかったので、メモ。

シンボルを入れてgdbで軽くみてみる

(gdb) bt
#0  0x00007fa0f157bda2 in select () from /lib/libc.so.6
#1  0x00007fa0eeaa12b6 in ?? () from /usr/lib/libxcb.so.1
#2  0x00007fa0eeaa2b02 in xcb_wait_for_event () from /usr/lib/libxcb.so.1
#3  0x00007fa0f27c4a37 in ?? () from /usr/lib/libX11.so.6
#4  0x00007fa0f27c4d75 in ?? () from /usr/lib/libX11.so.6
#5  0x00007fa0f27a5343 in XIfEvent () from /usr/lib/libX11.so.6
#6  0x00007fa0f27eca8e in ?? () from /usr/lib/libX11.so.6
#7  0x00007fa0f27ec001 in ?? () from /usr/lib/libX11.so.6
#8  0x00007fa0f27ec433 in _XimRead () from /usr/lib/libX11.so.6
#9  0x00007fa0f27db0d0 in _XimProtoCreateIC () from /usr/lib/libX11.so.6
#10 0x00007fa0f27ca09d in XCreateIC () from /usr/lib/libX11.so.6
#11 0x00007fa0eb59671d in QXIMInputContext::setHolderWidget () from /usr/lib/qt3/plugins/inputmethods/libqxim.so
#12 0x00007fa0f3a46430 in QInputContextFactory::create () from /usr/lib/libqt-mt.so.3
#13 0x00007fa0ebbd19d3 in QMultiInputContext::changeInputMethod () from /usr/lib/qt3/plugins/inputmethods/libqimsw-multi.so
#14 0x00007fa0ebbd1b68 in QMultiInputContext::slave () from /usr/lib/qt3/plugins/inputmethods/libqimsw-multi.so
#15 0x00007fa0ebbd1d73 in QMultiInputContext::setHolderWidget () from /usr/lib/qt3/plugins/inputmethods/libqimsw-multi.so
#16 0x00007fa0f3a46430 in QInputContextFactory::create () from /usr/lib/libqt-mt.so.3
#17 0x00007fa0f37a4540 in QWidget::createInputContext () from /usr/lib/libqt-mt.so.3
#18 0x00007fa0f37a4833 in QWidget::resetInputContext () from /usr/lib/libqt-mt.so.3
#19 0x00007fa0f39c6814 in QTextEdit::setText () from /usr/lib/libqt-mt.so.3
#20 0x00007fa0f39b9c46 in QTextBrowser::setText () from /usr/lib/libqt-mt.so.3
#21 0x00000000005197ba in VBoxSelectorWnd::vmListBoxCurrentChanged ()
#22 0x0000000000519b1f in VBoxSelectorWnd::languageChange ()
#23 0x00000000005226fa in VBoxSelectorWnd::VBoxSelectorWnd ()
#24 0x00000000004e1f28 in VBoxGlobal::selectorWnd ()
#25 0x00000000004d63b2 in main ()

ということで、QXIMInputContext::setHolderWidgetが戻ってこないためのようだ。ということは、LANG環境変数を変えて起動してみる。

makoto@localhost:~$ LANG=C /usr/bin/virtualbox

起動できた。Qtっぽい話のようだけど、とりあえず、VirtualBoxのTracへ登録。bug #1426

2008-04-09

N82のアップデート

Nokia N82のアップデートが来ました。Flash Liteが3にアップデートされたのと、Widgetsのサポートがメインです。

エクスプローラがお亡くなりになる

最近よくエクスプローラがお亡くなりになるので、デバッガで見てみた。

0:028> ~22kb
ChildEBP RetAddr  Args to Child
04fef428 7c94e9ab 7c86372c 00000002 04fef570 ntdll!KiFastSystemCallRet
04fef42c 7c86372c 00000002 04fef570 00000001 ntdll!ZwWaitForMultipleObjects+0xc
04fefb6c 7c83ab20 04fefb94 7c839b09 04fefb9c kernel32!UnhandledExceptionFilter+0x8e4
04fefb74 7c839b09 04fefb9c 00000000 04fefb9c kernel32!BaseThreadStart+0x4d
04fefb9c 7c9437bf 04fefc88 04feffdc 04fefca4 kernel32!_except_handler3+0x61
04fefbc0 7c94378b 04fefc88 04feffdc 04fefca4 ntdll!ExecuteHandler2+0x26
04fefc70 7c94eafa 00000000 04fefca4 04fefc88 ntdll!ExecuteHandler+0x24
04fefc70 045ec171 00000000 04fefca4 04fefc88 ntdll!KiUserExceptionDispatcher+0xe
04feff9c 045f13fc 04078f80 89526a98 00230022 ivimp3en!DriverProc+0xa5096
04feffb4 7c80b683 04078f80 0407b378 00230022 ivimp3en!DriverProc+0xaa321
04feffec 00000000 045f1380 04078f80 00000000 kernel32!BaseThreadStart+0x37

0:028> dd 04fefb94 l2
04fefb94  04fefc88 04fefca4

0:028> .exr 04fefc88
ExceptionAddress: 045ec171 (ivimp3en!DriverProc+0x000a5096)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000008
   Parameter[1]: 045ec171
Attempt to execute non-executable address 045ec171

0:028> .cxr 04fefca4
eax=00000000 ebx=00000002 ecx=00000000 edx=00000000 esi=04079380 edi=00000360
eip=045ec171 esp=04feff70 ebp=04feff9c iopl=0         nv up ei ng nz ac po cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010297
ivimp3en!DriverProc+0xa5096:
045ec171 0000             add     [eax],al                ds:0023:00000000=??

0:028> lmvm ivimp3en
start    end        module name
04540000 04613000   ivimp3en   (export symbols)       C:\WINDOWS\system32\ivimp3en.acm
    Loaded symbol image file: C:\WINDOWS\system32\ivimp3en.acm
    Image path: C:\WINDOWS\system32\ivimp3en.acm
    Image name: ivimp3en.acm
    Timestamp:        Sat Nov 10 10:02:22 2001 (3BEC7C9E)
    CheckSum:         0005E7D5
    ImageSize:        000D3000
    File version:     1.1.0.0
    Product version:  1.1.0.0
    File flags:       A (Mask 30003F) Pre-release Private
    File OS:          10001 DOS Win16
    File type:        3.8 Driver
    File date:        00000000.00000000
    Translations:     0409.04e4 0411.04e4
    CompanyName:      Intervideo Inc.
    ProductName:      InterVideo MP3 ACM CODEC
    InternalName:     IviMp3En.acm
    OriginalFilename: IviMp3En.acm
    ProductVersion:   1.10
    FileVersion:      1.10
    PrivateBuild:
    SpecialBuild:
    FileDescription:  InterVideo MP3 ACM CODEC
    LegalCopyright:   Copyright 2001 Intervideo Inc.
    LegalTrademarks:
    Comments:

WinDVDのCodecかぁ。はずしてみて、様子見てみるかなぁ。WinDVDアップグレードするのもばからしいし。

2008-04-01

Dromaeo - JavaScript Performance Testing

DromaeoというMozilla.com製のJavaScript Benchmark Toolがリリースされてた。なので、ちょっとテスト。

Firefox 3がなんとか逃げ切っているけど、Safariと互角くらい

2008-03-25

sunspider

Safariが最速と言っているので、WebKit.orgのsunspiderでパフォーマンスチェック。

IE7が遅すぎ。2001年からメンテナンス放棄しているようにしか見えないJavaScriptエンジンだしなぁ。Operaもなんだかんだで、IE7と変わらないように見える。Googleのグラフ作成機能だと、スケール調整ができないので、IE7が入るとちょっと見ずらい。なので、IE7を外してグラフを作成。

こうしてみると、Safariが速いように見えるよね、確かに。Mac版の方が表示が速いと思うけど、これはCoreGraphicの差でしょう。Windows版は、たぶんCoreGraphicのLibraryはGDI+のラッパーかなんかだろうし。

ちなみに、Firefox 3だと、こうなる。ついでにOpera 9.5 Betaのデータも追加してみる。

Fx3は結構いいよ、マジで。今Beta4だけど、正式版になるまでにSSE2の最適化コードがCairoに入るので、画像とか文字を複数重ねた時のスピードがより上がるはず。

2008-03-22

ATOK X3 for Linux のアップデートが出たようだけど、、、

ATOK X3 for Linuxのアップデートがリリースされている。

早速入れようと思って、ダウンロード。うちの環境は、Ubuntuのx64なので、書いてある手順は一切使えない。tarball用のインストーラがあるのだけど、怖いのでパッケージを見てみる。

makoto@localhost:~/Downloads/atokx3up1$ ls
README_UP1.txt  setupatok_up1.sh      setupatok_up1_tar.sh
bin             setupatok_up1_deb.sh  src
で、binの中は、
makoto@localhost:~/Downloads/atokx3up1/bin$ ls
ATOK  IIIMF

makoto@localhost:~/Downloads/atokx3up1/bin/ATOK$ ls
atokxup-20.0-2.0.0.i386.tar.gz

makoto@localhost:~/Downloads/atokx3up1/bin/IIIMF$ ls
iiimf-server_trunk_r3104-js2_i386.deb
iiimf-server-trunk_r3104-js2.i386.rpm
iiimf-server-trunk_r3104-js2.i386.tar.gz

どうも64ビット版のIIIMFをビルドしてもらえなかった様子。IIIMFのtarballは、ルートから展開する仕組みになっているのだけど、lib以下を/usr/lib/としているため、そのまま展開せずに、/usr/lib/のモジュールだけ、別途/usr/lib32/以下へ移動する必要がある

2008-03-06

Iris Browser 1.05 で日本語表示

いつの間にかIris Browserがバージョンアップしてた。バージョンは1.05なんだけど、インストールしてみると日本語表示ができるようになってた。それに、フォントもアンチエリアスがかかって表示される。ただ、Yahoo! Japanを表示しようとするとメモリ不足で開けないけど。

ついでに、WebKitのソースもダウンロード可能になってる。これは、1.04版らしい。

ちょっとしたメモ書き

S60 3rd FP1についている、ARM Toolchainでビルドしようとすると、落ちる

c:\Program Files (x86)\CSL Arm Toolchain\bin\arm-none-symbianelf-ld.exe: BFD 2.15.96 20050323 assertion fail /scratch/paul/2005-q1c/src/binutils-csl-arm-2005q1/bfd/elf32-arm.c:6158
make: *** [libnspr4.dll] Error 5

で、2007Q3版持ってきたところ、同じようにだめ。

c:\Program Files (x86)\CodeSourcery\Sourcery G++ Lite\bin\arm-none-symbianelf-ld.exe: BFD (CodeSourcery Sourcery G++ Lite 2007q3-52) 2.18.50.20070820 assertion fail /scratch/paul/symbian/obj/binutils-src-2007q3-52-arm-none-symbianelf-i686-mingw32/bfd/elf32-arm.c:8966
c:\Program Files (x86)\CodeSourcery\Sourcery G++ Lite\bin\arm-none-symbianelf-ld.exe: BFD (CodeSourcery Sourcery G++ Lite 2007q3-52) 2.18.50.20070820 assertion fail /scratch/paul/symbian/obj/binutils-src-2007q3-52-arm-no ne-symbianelf-i686-mingw32/bfd/elf32-arm.c:8992

ARM Toolchainをデバックするか。

2008-03-04

ATOK X3 for Linuxを買った

Anthyの変換効率の悪さに物事がはかどらないので、ATOK X3 for Linuxを買ってみた。家のMercurialサーバーが動いているUbuntu (AMD64) にインストールしようとしたが、苦戦。そのメモ。

setupatok_tar.shを使って、インストールするが、iiimdの起動が失敗している。

/usr/bin/iiimd: error while loading shared libraries: libiiimp.so.1: cannot open shared object file: No such file or directory

調べてみると、ATOK X3がインストールするiiimdは32ビット。32ビットのlibiiimp.so.1を展開してないようだ。なので、パッケージの中から、32ビットのパッケージ (iiimf-protocol-lib-trunk_r3104-js1.i386.tar.gz) を展開 (/で展開してしまうと、64ビットのライブラリを置き換えてしまうので、別のところで展開)して、/usr/lib32/へコピー。それでiiimdを実行し直してみると、今度は以下のエラーが。

/usr/bin/iiimd: error while loading shared libraries: libwrap.so.0: cannot open shared object file: No such file or directory

Ubuntuだと、libwrapは64ビットのパッケージしかないから、32ビットのパッケージをもってきて (というか32ビット版の Ubuntu のパッケージを引っ張ってきて)、インストール。

dpkg --fsys-tarfile libwrap0_7.6.dbs-11build1_i386.deb | tar xf -

これで、libwrap.so.0が持ってこれるので、それを/usr/lib32/へコピーして、ldconfigを実行。そうしたらOKだった。

Just Systemもパッケージ構成考え直した方がいいかと思う、正直。

2008-02-27

今さらながら、Nokia N82を買った

http://www.sparco.comを眺めていたら、N82が$479(送料込みで$517)だったので、ポチっとしてしまったのは約2週間前の出来事だったんだけど、UPS経由で送られてきた。

YouTubeもhttp://m.youtube.com/で普通に見られるし、無線LAN内蔵だし、デザインもNokiaチックでいいよねぇ。J+入れて日本語入力もできるようになったし。まぁ、海外&自宅専用機になるかと思うけど。

2008-02-21

MobaMona (仮) 0.3

とりあえず、http://ng8.s212.xrea.com/index.php?id=53にアップロード。中途半端な非同期アクセスを追加したり、コード上はいろいろ変更してる。X02HT上で個人で使って便利な2ちゃんねるブラウザがないので、まだいろいろ機能は追加するつもり。

2008-02-19

Mobile Moday Tokyo

English entry is here.

Firefox mobileの話が聞くことができるかもということで行ってきた。場所は原宿のKDDIデザイニングスタジオ。ガチガチにキャリア戦略に固められた、ガラパゴスなauの携帯とは全く異なるような話なのに、KDDIの施設でやるというのがなんと滑稽な。

まず、入り口で名刺を、、、て言われたんだけど、今無職(来月からは働くが)なので、名刺を忘れたと適当なことを言って中に入ると、Mozilla Japanの人にステッカーをもらう。cvs.mozilla.orgへのパーミッションを持っていて、一番最初のmozilla.jp partyのプレゼンターだったのに、全く知られていないというのがおもしろい自分。というか、ちゃんと入れないといけないコード用のバグ開かないと

今回のプレゼンテーターは2人。W3CのMikeとMozilla.orgのJay。プレゼンPCは当然Mac。

Mikeのプレゼンは、昨今のMobile上のWeb BroswerのTechnologyについて。日本ではjig、海外ではOpera Mini、最近だとskyfire (サーバー上のレンダリングはGecko!) のような、サーバー上でレンダリングしてその情報をクライアント側に送信して表示するプロキシ型と、Opera Mobile、Safari、Nokia S60 Broswerのようなクライアントですべてをやってしまう従来の形のものと2種類あるという話。また、レンダリングエンジンの種類 (Gecko / Presto / WebKit / Trident) はこういうのがあるよという話など。あとは、Web Browserのアーキテクチャの説明。ここでは Browser UIとRendering Engineの2層に分かれるという説明をしていたが、それは間違っていると思う。Operaは知らないけど、そのほかのブラウザは、基本的には、3層になっている。Browser UIとRendering Engine、そしてNetwork Transportの3つ。Firefoxの場合は、XUL / Gecko / Neckoになるし、Safariだと、Safari UI / Webkit / CoreNetwork、IEだと、Explorer Shell (SHDOCVW/BROWSEUI or IEFRAME) / Trident / WinInetになる。まぁ、ビジネスピープルに対してのプレゼンという内容なので別にいいやって感じ。何も得るものはなかった。

続いては今回の目的、Jayのプレゼン。Mozilla.org / Mozilla Corpの説明から始まり、Firefox Mobileのコンセプトについて説明。コンセプトで興味深いのは、Full Page Viewは当然のこと、いろんなマークアップを使って、モバイル用に抽出して表示する機能をつけるということかな。それがほかのブラウザにないところかも。そんな感じ

フォトについては、Flicr(http://www.flickr.com/photos/41841117@N00/sets/72157603934505259/)にアップロードしておく

Iris Browser based on WebKit

Torch Mobileから、WebKitベースのWebブラウザが出たので早速インストールしてみた。以下雑感

  • 日本語はすべて文字化け。というか、全部の文字us-asciiとしてデコードしてるだろ、この文字の化け方。
  • ソースは今後公開予定。というか直してあげる。
  • Windows Mobileのデザインからはちょっと逸脱?。スクロールバーの大きさが違ったり、メニューの配置だったり。逸脱するんだったら、もっと思いっきり逸脱しちゃえばいいんじゃないかなぁと
  • Nokiaから流行りだしたミニマップはなし。
  • ただ単にポートしましただけのものって感じ。

Webブラウザとしては何の目新しい部分がないんだけど、Webkitのコードが公開、マージされることが一番いいことかなって思う。

2008-02-12

面接官として見てきたポイント

前職(某外資IT系企業)で中途採用を担当しており、基本的にエンジニアリング職の採用を行っていた(自分が管理職だった)ため、ちょっと気になるエントリ(面接官からみた、面接で好印象を得るための5つのポイント)を見つけた。個人的にはちょっとずれている感触がある。

なので私自身がみるポイントをいくつか。

服装はそもそも気にしないというか、スーツをちゃんと着てきていれば、それが量販店だろうがどうかは一切気にしない。スーツで気にするとすれば営業職とかであって、エンジニア職では気にする点ではないです。ヨレヨレであっても気にはしません。ただし身なりは気にはしますので、前日くらいには美容室でも行って髪を切ってきましょう。(渋谷あたりにいけば朝までやっている美容室があります)

会社によるとは思いますが、前職の会社だとその会社で生き抜いて行けるかどうかをみます。そのためにいろいろな状況変化について行く (毎年組織変更があって、気づいたら自分のいる組織がどこかにいってしまうような会社ですから) 資質があるかどうかをチェックします。組織変更とかでナーバスになっていたら、逆に入社した側にとって不幸です。

自分自身の経歴をしっかり説明できること。ここに関して誇張して説明してもその後に面接でチェックするので嘘をついても無駄です。

外資系だと英語力が必要というのがあったりしますが、英語力はそんなにプラスになる材料ではないですね。そもそも英語力が必要な会社であれば、TOEICのスコアとかで書類の段階で落ちます。基本的には英語アレルギーさえなければ問題ありません。TOEICのスコアが高くても外国人とのネゴシエーションが下手な方をたくさん見てきていますので、ネゴシエーション能力がなければ、高い英語力も無駄です。

あと、特に重要なのはロジカルな思考。物事を論理的に説明するという能力がない方は非常に厳しいです。

この上に書いてあることが全然ダメな方をたまに見かけますが、そういう方と面接をするとたいてい5分くらいでNGです。それで終わっても面接を受けに来た人のためにならないので、ちょっとした指導(説教)になりますね。すぐ面接を切り上げることはNGでしたので。

だめな人の典型的な例

中途採用なので、基本的には数ヶ月で立ち上がることを採用側が期待しています。そのため、以下のようなことをいう方はマイナスポイントになります。

なぜこの会社を受けようとしたかという質問に、「いろいろなことが勉強できる / スキルアップできる」と答える。

というのも、会社は教育機関ではありません。業務をスムーズにするために、トレーニングを展開したりしますが、あくまでもそれは、会社の業務をより効率よくすることであって、勉強させるためにしているのではありません。勉強したいのであれば、未経験可とうたっている会社を受けるべきです。

こちらが求めている答えの一つをあげると、「自分はこれまで~~ということをしてきました。そのスキルがこういう点で御社で生かせると考えたからです」。こういう答え方だとまぁまぁでしょう。合格点ではないですが。

あと、長所と短所が一緒のことという人もいっぱい見てきましたが、その答えも微妙ですね。

最後に、大手転職エージェント等が転職をあおるような広告や言動をしていますが、自分自身を見つめ直して、本当に転職すべきかどうかを自分自身で考えてください。

ただ、年収が500万円くらいの人で自分自身に自信がある方は転職活動をして、自分自身の価値を調べてみるというのも手かと思います。

2008-01-28

WebKitのPortingについて考えてみる

WebKitのソースをちょっと見てたので。Windows版のSafariだとCoreGraphicsとかなどのプロプライエタリなコードをリンクしているので、WebKitをx64版でビルドするとかCE版でビルドするということはできない。オープンソースなCoreGraphicsを作ればいいんだけど、そのコストってって感じ。なので、別の方法ってのを。

Qtを使う

Swiftというブラウザがやっていること。ある意味一番楽なんだけど、OS Nativeかどうかという点において、非常に微妙

Cairoを利用

Firefoxでも使っているクロスプラットフォームグラフィックライブラリCairoを使う手。AdobeのWebKit実装だと、Cairoを使っているので、それを持ってきてってのが手っ取り早いのだが、Adobe自体の実装ってどうなったんだっけ?

GDI+を利用

Windows的にいえば一番パフォーマンスが出そうなんだけど (DirectXのラッパーだし)、実装が面倒そう。そもそもGDI+のDeveloperの奴らイケてないし。

暇な間になんか考えてみよう。

QtでおなじみのTrolltechをNokiaが買収

Nokiaのプレスリリースが出ている。

Nokia to acquire Trolltech to accelerate software strategy
http://www.nokia.com/A4136001?newsid=1185531

KDEとかで使われているQtを開発している会社、TrolltechをNokiaが公開買い付けで買収するみたい。Qtというか、Embeded Qtがあるので、どこかの組み込み系の会社に買収されるだろうと思っていたけど、Nokiaってのがびっくり。今度はS60にQtを乗せてくるってこと?。この買収はおそらくS60 4th Editionくらいで成果がでてくるでしょう。2年から3年後くらい後になると思うけど。

2008-01-23

コンパクトなキーボード選び

自宅では初代Microsoft Natural Keyboard (英語配列) を使っていて、ストックとして、Microsoft Natural Keyboard Elite (英語配列のOEM版でかつUSB接続のみというレア仕様)と、IBM Space Saver Keyboard II (英語配列のPS/2版)を持っているのだけど、別のコンパクトキーボードを買ってみようとして、興味を引かれたものは2つ。

まずは、マウスではお世話になっているLogitechのdiNovo Edge。初代diNovoは微妙だったけど、無駄なテンキーがないとか、もうデザインイケすぎ。ただ値段が高すぎるのが難点。軽く調べていたところ、レビュー記事を発見。まぁまぁイケてそう。

薄さ11ミリ、頑丈で打ちやすい「diNovo Edge」
http://journal.mycom.co.jp/articles/2007/01/22/edge/

ガシガシ打つ時代は過ぎ去ったか──「diNovo Edge」に見る当世キーボード事情
http://plusd.itmedia.co.jp/pcuser/articles/0708/24/news033.html

“世界最先端を行くキーボード”ことdiNovo edgeを使ってみた
http://k-tai.impress.co.jp/cda/article/stapa/36013.html

次は、Apple Wireless Keyboard。Macの配列ということが欠点だけど、それよりもMacBook系そのままのキータッチというところがミソ。そこが微妙なポイントなんだけど、安ければMac買っちゃいそうだしなぁ。ちなみにレビュー記事はこちら。

軽・薄・短の無線キーボードに陶酔する――「Apple Wireless Keyboard」
http://plusd.itmedia.co.jp/pcuser/articles/0710/23/news009.html

さぁ、どうしようか。そういや、全部Bluetoothだね。

2008-01-22

Proxy Server for S60

作ろうと思っていたものが、ひとつリリースされた。ようはS60用のProxy Server。

YaPN - Yet another Proxy for Nokia

海外に行くときは、Nokia N80を使っているのだけど、これで日本でもNokiaを使う機会が増えるかも

2008-01-21

XPCOM

XPCOMを使って、外部アプリケーションからFirefox / Thunderbirdと連携するアプリを書こうと思ったんだけど、アドオンとして動かさないと制約ありすぎ、というか面倒すぎ。これはちょっと後でまとめて、どこかにポストしておこう。英語と日本語で。

Internet ExplorerにおけるMETAエレメント

非常にスペックだけを書いたコンテンツを発見したので呆れた。呆れてても意味ないので、ちょっと覚えている範囲で書いてみる。

HTML - meta タグの仕様詳細まとめ
http://www.drk7.jp/MT/archives/001311.html

まずInternet Explorerだと、こんな動作ははっきり言ってしない。それを理解するためにはInternet Explorerの動作原理をまず知る必要がある(TechEdかなんかでたぶんマーケの人が説明してたけど)。

METAエレメントというのは、W3Cのスペック上は、HTTPヘッダの代わりになるようなことは書いてあるが、Internet Explorerの場合はそんなことはない。というのも、HTTPヘッダのハンドリングというのはWININET.DLLと呼ばれるモジュールがすべてハンドルする。しかもこのモジュールは、HTMLを解析することはしない。そのため、METAで何を書こうがWININET.DLLが知る由もないわけだ。

ただ、といってもヒストリカルなこともあるので、METAエレメントを利用しても全く無意味 ということではない。というのも、Trident(MSHTML.DLL)がHTMLを解析する際に、よく使われるようなもの、たとえば、Pragma: no-cacheのようなよく使われる一部のものだけは、Tridentで上書きするので、機能するようになっている。もちろん、Visual Styleを無効にするとかは、Tridentの機能でやってるわけだけど。

サーバーサイドの人たちは、スペック至上主義的な考えでプログラミングをするみたいだけど、実際のクライアントの実装がどうなっているのかにも興味を持ってほしいと思うね

参考

How to prevent caching in Internet Explorer
http://support.microsoft.com/?id=234067

2008-01-14

WebKitをWindowsから使う

I posted English content in http://wontfix-en.blogspot.com/2008/01/since-i-research-webkit-i-try-writing.html.

ちょっと、WebKitについて調べてみたので、ついでにWebKitの使い方を調べてみた。

WebKitはCOMのインターフェイスを持っているので、COM経由でロードして使う。ここらはInternet Explorerとかと一緒。

初期化

IWebViewをCoCreateInstance()で取得後、親のウィンドウハンドルを登録して、initWithFrame()を呼べば、WebKitのウィンドウが作成される。

IWebView *pWebView;
HRESULT hr;

hr = ::CoCreateInstance(CLSID_WebView,
                        0,
                        CLSCTX_ALL,
                        IID_IWebView,
                        (void**)&pWebView);
if(hr != S_OK)
    goto error;

hr = pWebView->setHostWindow((OLE_HANDLE) hWnd);
if(hr != S_OK)
    goto error;

::GetClientRect(hWnd,&clientRect);
hr = pWebView->initWithFrame(clientRect, NULL, NULL);
if(hr != S_OK)
    goto error;

URLのロード

Mac OS Xでの使い方のいろんなWebページを見たところ、takeStringURLFromを使えばいいという記述がほとんど。なのでそのまま使ってみたところ、E_NOTIMPLを返すようになっているようだ。

Windows上のWebKitの場合でURLを開く場合は、IWebURLRequestを持ってきて、IWebFrame::loadRequest()経由で開く。すでにHTMLを持っている場合は、そのまま渡すことも可能。

HRESULT hr;
BSTR str;
IWebFrame* pWebFrame;
IWebURLRequest * pWebURLRequest;
IWebView* pWebView;

hr = ::CoCreateInstance(CLSID_WebURLRequest,
                        0,
                        CLSCTX_ALL,
                        IID_IWebURLRequest,
                        (void**)&pWebURLRequest);
if(hr != S_OK)
    goto error;

str = ::SysAllocString(L"http://www.apple.com/");
hr = pWebURLRequest->initWithURL(str,
                                 WebURLRequestUseProtocolCachePolicy,
                                 60);
if(hr != S_OK)
    goto error;

hr = pWebView->mainFrame(&pWebFrame);
if(hr != S_OK)
    goto error;

hr = pWebFrame->loadRequest(pWebURLRequest);
if(hr != S_OK)
    goto error;

pWebURLRequest->Release();
pWebFrame->Release();

WebKit for Windows Mobile

WebKitのWindows Mobile版があるのかどうかを探してみたところ、Wake3という会社がすでにポートしているみたいだ。ただ、コードを公開していないようで、このWebKitのポートとかで食ってこうって考えているような会社?なのかな?

WebKit自体は詳しくないけど、たぶん、CoreFusion.DLLとかもポートしないといけないかもしれないから、それだったら妥当かな。ただ、S60の実装もあるし、別の誰かが作って公開しそうな気がしないでもない

2008-01-12

X02HT用の2ちゃんねるブラウザ

MobaMona-0.1.CABをおいておいた。CABファイルをスマートフォンにコピーして、エクスプローラで実行すればインストールできる。

要望等があれば makoto.2000 at gmail.com へよろしく

Microsoft製作のジョークビデオ

エンガジェットから。

http://japanese.engadget.com/2008/01/10/gates-last-days-video/

Microsoftって会社はくだらないビデオ作るのが好きだよね。個人的には、スティーブ・バルマーのWindows 1.0のCMをぱくった、ブライアン・バレンタイン(元MicrosoftのWindows部門のVice President、今はAmazon)のWindows XPのビデオが好きだな。

ちなみにWindows 1.0のCMってのはこれなんだけどね。

2chブラウザ MobaMona (仮)

大体できてきた。.NET Compact Framework自体はじめて使うのだけど、結構制約(ほしい機能がすくなくて)が多くて萎えまくり。WndProcはoverrideメソッドで必要だと思う、正直。

Windows Mobile StandardのUI Designに反するかもしれないけど、Rich Edit系のコントロールがないと、普通の開発者は困ると思う。デコレーション付きの編集用コントロール書くの面倒だし。あと、ConnectionMgr用のクラスとかも普通必要だと思う。

あと、びっくりしたのはドロップダウン形式のリストボックスって、Windows Mobile Standardにないの?。板のスレッド一覧を作る際に、使おうと思ったら、なくてショックだった。これは必要でしょ?

複数のフォームを使っているとZオーダーがぐちゃぐちゃになったり、IMEを使っているときもなぜかZオーダーが狂って、今表示していたフォームじゃない、別のフォームが表示されたりと、変な動作もあるけど、一通り、読み込み、書き込み、基本的なブックマーク機能の実装を完了した。ZオーダーがおかしくなるというIssue自体はWindows 2000とかXPでもたびたびあるIssueだったのだけど、Windows CEでも同じようなパターンなのね。

なお、スクリーンショット自体は、KTCaptを使って撮ったのだけど、SDカードに最初インストールしたところ、オプションを選択できなくて(スタートメニュー内のショートカットが壊れてて)、ちょっと時間がかかった。とりあえず、本体メモリにインストールすることにしたけど。

2008-01-10

Backキーのハンドルの仕方

Windows Mobile 6 Standardでアプリケーション開発をやり始めたんだけど、Backキーのハンドルがどうしてもできない。

しょうがないので、GoogleとかLive Searchで検索してみたところ、以下のドキュメントを発見

How to: Override the Smartphone Back Key

ふむふむ、Keys.EscapeとかKeys.Backをハンドルすればいいのか、、、と試しにやってみるが、上手くいかない。これって.NET Compact Framework 3.5じゃないと動かないの?ということで、いろいろ調べると、以下のところに落ち着いた

Capture Back Key - MSDN Forum

Mauricio,

This is a bug in CF. Setting the form's KeyPreview property to true should allow you to handle the Back key in the form's KeyPress event handler. However, I've discovered that the KeyPress event is only fired if the focused control is a container control (form, tab page, panel, etc.).

I'm investigating a couple of possible workarounds. I'll let you know if I find one.

Dan

ようはC#だとやり方がないということ。じゃ、ウィンドウプロシージャをのっとればいいじゃんと思ったが、.NET Compact Frameworkだと、ウィンドウプロシージャはFormクラスのメンバになってないそうだ。

やりたくはなかったが、サブクラス化して、ウィンドウメッセージを監視するしかないので、試してみたところ、以下のような感じでやれば、Backキーを監視、無効にすることは可能みたい。ホントはSHCMBM_OVERRIDEKEYを使うのがいい方法かと思うけど。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowProc
{
    public partial class Form1 : Form
    {
        #region P/Invoke
        public const int GWL_WNDPROC = -4;
        public const uint WM_HOTKEY = 0x0312;

        [DllImport("coredll.dll")]
        public extern static IntPtr SetWindowLong(IntPtr hwnd,
                                                  int nIndex,
                                                  IntPtr dwNewLong);

        [DllImport("coredll.dll")]
        public extern static int CallWindowProc(IntPtr lpPrevWndFunc,
                                                IntPtr hwnd,
                                                uint msg,
                                                uint wParam,
                                                int lParam);

        [DllImport("coredll.dll")]
        public extern static int PostMessage(IntPtr hwnd,
                                             uint msg,
                                             uint wParam,
                                             uint lParam);
        #endregion

        public delegate int WndProcDelegate(IntPtr hwnd, uint msg, uint wParam, int lParam);

        IntPtr mOldWndProc;
        WndProcDelegate mProc;

        public Form1()
        {
            InitializeComponent();

            mProc = new WndProcDelegate(WndProc);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SetHook();
        }

        private void SetHook()
        {
            IntPtr hwnd = this.Handle;
            if (hwnd == IntPtr.Zero)
            {
                throw new InvalidOperationException("hWnd is null");
            }

            mOldWndProc = SetWindowLong(hwnd,
                                        GWL_WNDPROC,
                                        Marshal.GetFunctionPointerForDelegate(mProc));
        }

        // Restores the original window procedure for the control.
        private void Unhook()
        {
            IntPtr hwnd = this.Handle;
            if (hwnd == IntPtr.Zero)
            {
                throw new InvalidOperationException("hWnd is null");
            }

            SetWindowLong(hwnd, GWL_WNDPROC, mOldWndProc);
        }

        protected virtual int WndProc(IntPtr hwnd, uint msg, uint wParam, int lParam)
        {
            if (msg == WM_HOTKEY && (lParam & 0xffff0000) == 0x1b0000)
            {
                if ((lParam & 0x1000) == 0)
                {
                    //
                    // This is key down message of [Back] key
                    //
                }
                return 1;
            }

            return CallWindowProc(mOldWndProc, hwnd, msg, wParam, lParam);
        }
    }
}

2008-01-09

Mcirosoft Virtual PC 2007日本語版

ちょっと試してみようと思って (Windows MobileのEmulatorでも使うドライバもアップデートされるだろうし) 入れていたんだけど、ノートPC上で使うこともないのでアンインストールすることにした。VMWareのライセンスも持っているし。

で、使っているのがWindows Vista x64なので、当然x64版の日本語版をインストールしていたのだけど、面白いことを発見。

 C:\Windows\System32\ドライバ のディレクトリ

2008/01/04  21:11    <DIR>          .
2008/01/04  21:11    <DIR>          ..
2007/02/18  00:22           296,816 VMM.sys
               1 個のファイル             296,816 バイト
               2 個のディレクトリ  26,437,722,112 バイトの空き領域

VMM.SYSというのは、カーネルモードで動くVirtual PCの仮想部分のエンジンなんだけど、インストール先がOver Localizationですか。さすがインド人仕事

2008-01-07

2chのサーバーって

Content-Encoding: gzipじゃないときは、Content-Lengthが返ってくるんだけど、gzipなときは、Content-Lengthは返ってこないんだ。初めて知った。

今作ろうと思っているもののTODOリスト

今無職クンなので、久しぶりにコードを書き始めている。とりあえず、今作ろうと思っているもの

2chブラウザ for X02HT

たぶん一週間くらいでかけると思う。面倒なので.NET Compact Framework 2.0で書く予定。証明書どうしよう。買うと$350くらいだったはずだし、Symbian Signedとかみたく商用じゃなければ格安に証明書発行させてもらえないかな、Microsoftさん。

Proxy Server for X02HT

ZeroProxyでも改造して作る。SN番号送信できるProxyサーバーがあれば便利かと思ってるので。

NSIS (Nullsoft Scriptable Install System) for Win64

簡単にポートはできないんだよね、これ。というのも、スクリプトの機能で直接Win32 APIを呼ぶことができるんだけど、その部分全部アセンブラ。x64のアセンブラ書くのは、NSS (Network Security Services)の以来かな?。NSSのx64コードはSunの人に渡しちゃったし。あと、ビルドシステムも直さないといけない。

Thunderbird IFilter

Google Summer Codeに選ばれていたけど、どうなったんだろ。ところで、Google Summer Codeで選ばれたもので、最後までちゃんとやってたのって、どのくらいの比率なんでしょう。

Xvid for Win64

アセンブラ依存の部分をx64で動くコードにする

今のところはそんな感じかな

いまさらながら GZipStream を実装してみる

Windows Mobile用の.NET Compact Framework 2.0だと、GZipStreamがないので、gzipなデータを展開するのが面倒。zlibce.dllを使うとかいろいろあるのだけど、Windows Mobile 6.0 Standard (X02HT)だと標準でzlib.dllを持っているので、それを直接dllimportすることにした。ただ単に、Content-Encoding: gzipをハンドルしたいだけなんで。

実装する前に、誰かが実装しているかどうかを調べてみたところ、Google Data APIs.NET libraryにあるのを発見。そのまま、持ってきてテストしてみたところ、二つの問題が。。。

  • finallyで常にクラッシュする。GCHandle使っているからだろ。
  • ヘッダをスキップしていないので、GZPI Streamの解析で常にStreamErrorになる

ということで、そこらを直してみたところ、上手く動いた。

ま、.NET Compact Framework 3.5だと、GZipStreamは実装されているので、こんな苦労はいらないけど。