tonextone.com/note/

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

Copyright ©master_at_tonextone.com All rights reserved.

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

Posted : 2005-09-04 00:00 / Category : [開発日誌]
このエントリの続き。
ようやく、時間がとれたので、ac.jsを読んでみた。
結論:
key event をトリガーにするのは諦めて、入力値の変更をトリガーにしている。
そのために、10 ms 毎に入力値を監視している(idkc() という関数)。
その部分だけ抜き出すと、つまりこういうことです。
思った通りの実装ではあったが、
実際やった経験がなかったし、何しろ難読化されているので、
すぐには、突き止められなかった。

ちなみに、難読化されたコードの整形には、GNU indent (on Cygwin) を使いました。
javascript-modeも便利ですね。

トラックバック

(1)
[ このエントリへはツッコミ出来ません ]

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 )
[ このエントリへはツッコミ出来ません ]

JS::Lib その2

Posted : 2005-07-31 00:00 / Category : [開発日誌]
このエントリの続き。
"There and Back Again"にある Ajax ライブラリを、いろいろ試してみた。

このうち、
PHP の関数 func を、JavaScript の関数 x_func にマッピングして、
someObj.onClick = x_func(args,callback_func);
という使い方ができるやつは、これら

この中にある、Sajax を使っている。
それ以外も全部知ってはいたものの xajax は使ったことが無かったので使ってみた。

Sajax との違い:

・DHTML も PHP でやる方針らしい(content replacement)。
>> クライアントサイドの事をサーバサイドの言語でやるのは、逆にメンドウだよ。

・そのための XML をサーバから返すらしい。
例えば、
<update action="assign">
  <target attribute="$sAttribute">$sTarget</target>
  <data><![CDATA[$sData]]></data>
</update>
>> ふーん。でも、JSON のほうが良いな…。

・配列を翻訳してくれるらしい。
>> へぇ。それは便利。
>> でも、PHPオブジェクト⇔JavaScriptオブジェクトの翻訳を、PHP でやってるんでしょ。
>> 俺は、処理が速いほうが良いからこれ使ってるしな…。

という事で、乗り換えには至らず。

Sajax の更新が滞っている事だけが気になる。

ちなみに、ajax-pagesというのも、試してみた。
これは、テンプレートファイルと、データファイルを、動的にロードしてページを作るというモノ。
テンプレートの書式は、いかにも、スクリプト埋め込み型で、すごく分かりやすい。
ここに HTML
<% ここにJavaScript %>
ここに HTML
でも、今のところ、そういう使い方する予定が無いので、保留。

ツッコミ

1: master (07/31 01:34)
次にやるべき事:
外部サービスからの RSS をそのままブラウザに渡して JavaScript で処理してる部分を、
RSS ->(magpieRSS)->(json-php)-> JSON と変換して、ブラウザに返すようにしてみる。
そのほうが、サーバサイドの処理をカマせ易いし。
2: master (08/12 15:28)
結局、
RSS ->(PEAR::XML_Unserializer)->(php-json)-> JSON
にしました。
[ このエントリへはツッコミ出来ません ]

Signal vs. Noise

Posted : 2005-07-21 00:00 / Category : [随筆]
Signal vs. Noiseというキーワードに出くわして想った事:

情報とは何か?
情報とは、秩序である。
経験に基づいた適当な抽象化によって秩序が見出される。

「シる(realize)」とは何か?
「シる」とは、見出した秩序を経験になぞらえることである。

「情報が溢れている」という。
「シる」ことができる許容量以上の情報があるという意味だろう。
秩序を認知できるが、
それが自分の経験則から外れる、あるいは経験に照らし合わせる時間がない。
「シらない」物事が多いということを「シっている」ということだ。

何が言いたいか?
「シる」も「シらない」も、抽象化のサジ加減一つだという事。

どんな物事も、究極に抽象化すれば、規則性を見出せる。
どんな規則性も、究極に抽象化すれば同じだ。
「あぁ、そこには、こういうパターンがあるね。
 このパターンなら『シっている』よ。」

どんな物事も、究極に具体化すれば、不規則性を見出せる。
どんな規則性も、究極に具体化すれば別物だ。
「なんと、これは。完璧なカオスだ。
 こんなものがあるとは『シらなかった』。」

誰でも、何かに取り組むとき、この両極端の中間のどこかにいる。

その中間地点の決め方が、センスだ。

色即是空
受想行識
[ このエントリへはツッコミ出来ません ]