tonextone.com/note/

Last-modified: 2006-09-01 (金)

Copyright ©master_at_tonextone.com All rights reserved.

JavaScript の *.onkey* と IME の事情。その1

Posted : 2005-08-29 00:00 / Category : [開発日誌]
Google suggestの補完候補表示機能は、便利なので、結構いろんな人がマネをしている。
俺もこれで真似しているわけだが、まだマネし切れていない部分がある。
それは、かな漢字変換が未確定の段階での、補完候補取得機能。
IME-on でも、キーをタイプする毎に、補完候補が更新されるっていうヤツ。
Google 以外で、この機能を Cross-Browser に実装して、公開している人もいないようだ。

という事で、あの難読化された ac.js から学ぶ事にする。
現段階で分かっている事は、
      IME-on 状態で、

      IE:
          キータイプ毎に keydown, keyup が発生する。keypress は発生しない。
          未確定段階の入力値を getElementById().value で取得できる。

      Firefox:
          キータイプ毎に keydown, keypress が発生。keyup は発生しない。
          未確定段階の入力値を getElementById().value で取得できない。
          [Enter]で確定すると、 keyup が発生し、入力値を getElementById().value で取得できる。

      Opera:
          キータイプしても keydown,keypress,keyup は発生しない。
          未確定段階の入力値を getElementById().value で取得できない。
          [Enter]で確定しても、keydown,keypress,keyup は発生しない。
          そこから更に[Enter][Backspase]などの制御キーをタイプすると、
          ようやく keydown,keypress,keyup が発生する。
    
[テスト]

やっぱり、google の中の人はすごいなぁ。それにひきかえ Opera の中の人は…。

トラックバック

(2)

ツッコミ

1: master (08/29 23:24)
よく見ると、日本語版(hl=ja)と、英語版(hl=en)とでは、挙動が違う!!
英語版( http://www.google.com/webhp?hl=en&complete=1 )
日本語版( http://www.google.co.jp/webhp?hl=ja&complete=1 )

英語版だと、Opera で IME-on の場合、(普通には)補完されない!!
やはり多言語対応のために hack が必要だったんじゃないかと推測する。

その代わりというか、
英語版では第一候補の補完部分が入力欄に自動的に追加される。
2: master (08/30 00:55)
InstallAC(document.f,document.f.q,document.f.btnG,"search","en");
の5番目の引数に "ja" を渡すと、IME-on でも良い感じで処理するようになっている。
要するに、この引数での条件分岐を追っていけば、求める hack を突き止められる。
[ このエントリへはツッコミ出来ません ]

PHP フレームワーク その1

Posted : 2005-08-11 00:00 / Category : [開発日誌]
PHP のフレームワークを作ろうと思う。その名も GENUIN 。
PHP の言語設計上の特長や、 legacy を尊重した、
「オブジェクト指向」ではなく、
「オブジェクト思考」あるいは「オブジェクト嗜好」なフレームワーク。
Perl のオブジェクト指向の実装を参考にしたい。

特徴:

  • クラスを使わない。命名規約や配列や、その他 genuine な概念を駆使する。
    $_CONFs,$_PARAMs,$_MESSAGEs,$_DB_*,$_SQL_*,...
  • register_globals_securely On.
    リクエスト変数へのグローバルアクセスをセキュアに提供。
  • テンプレートエンジンを使わない。PHP で充分。

    $ less hoge.html
    <?function _head($_){?>
    <html>
      <head>
      </head>
      <body>
        foo
        <?o($_['var_head']);?>
        bar
        <?}?>
    
        <?function _loop($_){?>
        foo
        <?o($_['var_loop']);?>
        bar
        <?}?>
    
        <?function _tail($_){?>
        foo
        <?o($_['var_tail']);?>
        bar
      </body>
    </html>
    <?}?>
    <?
    include_once('path/to/config.php')
    include_once($_CONF['path']['to_controller'].'hoge.php')
    ?>
            

    $ less hoge.php
    <?
    
    // process_any();
    
    $_ = $_PARAMs['head'];
    _head($_);
    unset($_);
    
    foreach ($_PARAMs['loop'] as $var)
    {
      $_ = $var;
      _loop($_);
      unset($_);
    }
    
    $_ = $_PARAMs['tail'];
    _tail($_);
    unset($_);
    ?>
            

トラックバック

(1)

ツッコミ

1: master (08/12 10:37)
「プログラマー日記」さんも同じ事を考えているらしい。
http://www.programmers-paradise.com/tdiary/?date=20050801#p01
http://www.programmers-paradise.com/tdiary/?date=20050808#p02
http://www.programmers-paradise.com/tdiary/?date=20050809#p02
http://www.programmers-paradise.com/tdiary/?date=20050809#p03
2: itoh (09/15 00:18)
p0t.jpの人も同じ事書いてた。
http://p0t.jp/mt/archives/2005/08/2_1.html
1行フレームワークAwesomeFrameworkだって。
命名規則っていうのは多かれ少なかれつかいますなー。
3: master (10/30 16:41)
メモ:

ライブラリはなるべく標準的なものを使う。
PEAR::
DB, DB_DataObject,
HTTP_Client, Mail_Mime,
Auth, XML_Serializer, XML_RPC

PECL の filter も気になる。
( http://pecl.php.net/package/filter )
[ このエントリへはツッコミ出来ません ]