prototype.js version 1.4.0 系での Enumerable の使い方

  http://www.onflow.jp/blog/archives/2005/11/prototypejs_ver.html

  prototype.js 1.4.0 の Enumerable を使うと

var data = [0, 1, 2];
for (var i = 0, len = data.length; i < len; i++) {
    alert(data[i]);
};


  こう書いていたのが

var data = [0, 1, 2]
data.each(
    function (value, index) {
        alert(value);
    }
);


  のように Iterator パターンで書けるようになる.

  ハッシュの場合は $H() とあわせて以下のようにかけて便利.

var data = $H({a:1, b:2});
data.each(
    function (pair, index) {
        alert(pair.value);
    }
);

複雑で重くなった JavaScript を高速化する方法

  兎にも角にも . (ドット) を減らすことが大切っぽい.

  例えば,

for (var i = 0; i < array.length; i++) {
    ....
}


  と書いているのを

for (var i = 0, len = array.length; i < len; i++) {
    ....
}


  こう書くだけで数倍速度が変わるみたい.

- via: IT 戦記
  http://d.hatena.ne.jp/amachang/20060114/1137243389
  http://d.hatena.ne.jp/amachang/20060112/1137085710

Text::VimColor を使って chalow のソース表示に色をつける

  ソースコードを色付けする Perl モジュール Text::VimColor を使って chalow 表記の[src]... [/src]を色付けする方法.

- ソースコードを色付けする関数
  これを chalow の適当なところに貼り付けておく.cl.conf でも OK.
  tab 幅なんかはお好みで.

  PHP ファイルの場合に特別な処理をしているのは,PHP の場合は PHP タグ (<?php ... ?>) に囲まれていないと
  ソースに色をつけてくれない.そのためタグがついていない場合は一回タグをつけてあげてる.
  ASP とかもそうだと思う.

sub highlight {
    my ($filetype, $string) = @_;
    my $add_php_tag = 0;

    $filetype =~ s/^\s*(.*?)\s*$/$1/s;
    $string =~ s/^\s*(.*?)\s*$/$1/s;

    # PHP ファイルで PHP タグ (<?php...?>) がない場合は PHP タグを付加
    if ($filetype eq 'php') {
        if ($string !~ m/<\?/) {
            $string = "<?php\n" . $string . "\n?>";
            $add_php_tag = 1;
        }
    }

    my $syntax = Text::VimColor->new(
        filetype => $filetype,
        string => $string,
    );

    my $html = $syntax->html;
    chomp $html;

    # PHP ファイルで PHP タグを付加した場合は PHP タグを削除する
    if ($add_php_tag == 1) {
        $html =~ s!^<span class="synSpecial">&lt;\?php</span>\n!!m;
        $html =~ s!^<span class="synSpecial">\?&gt;</span>!!m;
    }

    # tab を &nbsp; 4 つ分に
    $html =~ s/\t/{'&nbsp;' x 4}/ge;
    # 2 つ以上のスペースを &nbsp; に
    $html =~ s/(  +)/{'&nbsp;' x length($1)}/ge;
    # 行末に <br /> を付加
    $html =~ s/$/<br \/>/mg;

    return $html;
}


- chalow を編集
  chalow には以下のパッチをあてる.

--- chalow-orig 2005-08-21 07:35:31.000000000 +0200
+++ chalow      2006-01-13 23:47:34.806132000 +0100
@@ -13,6 +13,7 @@
 use Time::Local;               # for 曜日
 use HTML::Template;
 use ChangeLogReader;
+use Text::VimColor;

 my $version = '1.0rc6';

@@ -1292,11 +1293,8 @@

     ### ソースエスケープ - "&" や "<" などを置換し pre を付ける
     $num_of_escaped_src = 0;
-    $$strp =~ s!\[src\](.*?)\[/src\]!
-       $escaped_src{++$num_of_escaped_src} = $1,
-       $escaped_src{$num_of_escaped_src} =~ s/&/&amp;/g,
-       $escaped_src{$num_of_escaped_src} =~ s/</&lt;/g,
-       $escaped_src{$num_of_escaped_src} =~ s/>/&gt;/g,
+    $$strp =~ s!\[src(.+?)?\](.*?)\[/src\]!
+       $escaped_src{++$num_of_escaped_src} = highlight($1, $2),
        sprintf("\x6\x13%d\x3", $num_of_escaped_src)!gsmxe;

     ### プラグインエスケープ
@@ -1312,7 +1310,7 @@
     ### プラグインアンエスケープ - 実行!
     $$strp =~ s|\x7\x13(\d+)\x3|eval($escaped_plugin{$1})|ge;
     ### ソースアンエスケープ - pre 追加
-    $$strp =~ s|\x6\x13(\d+)\x3|<pre>$escaped_src{$1}</pre>|g;
+    $$strp =~ s|\x6\x13(\d+)\x3|<p class="code">$escaped_src{$1}</p>|g;
     ### HTML アンエスケープ
     $$strp =~ s|\x5\x13(\d+)\x3|$escaped_string{$1}|g;
 }


- 使い方
  色付けするソースの種類がわからないといけないので,[src]記法を拡張した.
  書式は

[src ソースの種類
  :
[/src]

  ソースの種類を書く必要がある.これだけで OK.
  ソースの種類は vim が理解できるもの.Vim 6.3 の場合は

/usr/local/share/vim/vim63/syntax

  ここにあるものだと思う.ちなみに 408 種類ある.

  そして,これに対応した css ファイルは

Text-VimColor-0.09/lib/Text/VimColor/light.css

  にあるので,これを適当に編集して使う.

  あと,Text::VimColor を読んでみると vim を起動していることがわかった.
  なるほどね…

  サンプルはこのサイト.

CSS を使ってキーボードのアイコンっぽく表示させる

  http://kikuz0u.x0.com/td/?date=20060111#p02

kbd {
  color: #333333;
  background-color: white;
  text-align: center;
  border-left: 1px solid #cfcfcf;
  border-top: 1px solid #cfcfcf;
  border-right: 2px solid #666666;
  border-bottom: 2px solid #666666;
  -moz-border-radius: 4px 4px 4px 4px;
  padding-left: 1px;
  padding-top: 0px;
  padding-right: 2px;
  padding-bottom: 0px;
  margin-left: 2px;
  margin-right: 2px;
  vertical-align: top;
  font-family: sans-serif;
}


  例えば,Ctrl+Alt+Del は
  kdb
  のようになる.いい!

標準出力に色を付ける PHP ライブラリ PEAR::Console_Color

  http://pear.php.net/package/Console_Color

  コメント欄で教えてもらったけど,Perl 版,Ruby 版に続いて PHP 版もあった.
  ただ,Perl 版,Ruby 版と違って使いにくそう.

<?php
require_once 'Console/Color.php';

// 文字の前の %B,%R,%G がポイント
print Console_Color::convert("%BBLUE\n");
print Console_Color::convert("%RRED\n");
print Console_Color::convert("%GGREEN\n");
?>


- ref.:
  [2006-01-07-5] 標準出力に色を付ける Perl ライブラリ Term::ANSIColor
  [2006-01-07-6] 標準出力に色を付ける Ruby ライブラリ Term::ANSIColor for Ruby

標準出力に色を付ける Ruby ライブラリ Term::ANSIColor for Ruby

  http://term-ansicolor.rubyforge.org/

  Perl 版に続いて Ruby 版もある.

require 'term/ansicolor'
include Term::ANSIColor

print red, bold, "red bold", reset, "\n"


  Perl,Ruby と来たので PHP 版は…と思ったけど需要もないな.

- via: tune web
  http://www.tsunematsu.cc/archives/2005/12/ruby_1.html

- ref.:
  [2006-01-07-5] 標準出力に色を付ける Perl ライブラリ Term::ANSIColor
  [2006-01-09-2] 標準出力に色を付ける PHP ライブラリ PEAR::Console_Color

標準出力に色を付ける Perl ライブラリ Term::ANSIColor

  http://search.cpan.org/~rra/ANSIColor-1.10/ANSIColor.pm

  なるほど,世の中には便利なライブラリがあるもんだ.

#!/usr/bin/env perl

use strict;
use warnings;
use Term::ANSIColor qw(:constants);

$Term::ANSIColor::AUTORESET = 1;

print BOLD RED   "RED\n";
print BOLD GREEN "GREEN\n";
print BOLD BLUE  "BLUE\n";


- via: memo.xight.org
  http://memo.xight.org/2006-01-04-6

- ref.:
  [2006-01-07-5] 標準出力に色を付ける Perl ライブラリ Term::ANSIColor
  [2006-01-09-2] 標準出力に色を付ける PHP ライブラリ PEAR::Console_Color

register_globals が On の環境でも Off と同様の状態にする方法

  http://www.asahi-net.or.jp/~wv7y-kmr/note/2005-12.html#YMD20051225_PHP_reg ...

  PHP 4.2.0 から register_globals は Off になっているのだけれども,
  古いスクリプトは register_globals が On であることを前提にかかれている場合も多い.
  実際,保守しているものの中にも多数ある.

  以下,上記サイトで公開されている関数を使用することでグローバル変数の汚染については回避できそう.

<?php

function unset_register_globals()
{
    // register_globals が有効でない場合は以降の処理は行わない
    if ( ini_get( 'register_globals' ) ) {
        return;
    }
    // $_REQUEST に GLOBALS が含まれている場合はグローバル変数が上書きされる可能性があるため、処理を終了
    if ( isset( $_REQUEST['GLOBALS'] ) ) {
        exit( 'GLOBALS overwrite attempt detected' );
    }
    // 削除しないグローバル変数名をキーとした配列を作成
    $no_unset = array( 'GLOBALS'  => '', '_GET'    => '', '_POST' => '', '_COOKIE' => '',
                      '_REQUEST'  => '', '_SERVER' => '', '_ENV'  => '', '_FILES'  => '' );

    // グローバル変数として登録される変数名をキーにした配列を作成
    $input = array_merge( $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES,
                          isset( $_SESSION ) ? (array)$_SESSION : array() );

    // 登録されたグローバル変数を削除
    foreach ( array_keys( $input ) as $k ) {
        if ( ! isset( $no_unset[$k] ) && isset( $GLOBALS[$k] ) ) {
            unset( $GLOBALS[$k] );
        }
    }
}
unset_register_globals();

?>

PHP で角丸枠 (CSS) を簡単に作る方法

- PhpMyBorder - add round corners by CSS
  http://www.phpmyborder.com/

<?php
require_once 'phpMyBorder2.class.php';
$pmb = new PhpMyBorder();
echo $pmb->begin_round('260px', 'DDDDFF', '78AAFF');
?>

ここに枠内に入れるコンテンツを書く

<?php
echo $pmb->end_round();
?>


  こりゃ便利.

- via: PHPSPOT 開発日誌
  http://phpspot.org/blog/archives/2005/12/phpcss.html

Internet Explorer の右クリックメニューからはてなブックマークに登録するスクリプト

<script type="text/javascript">
var p = external.menuArguments;
var url = new String(p.parent.document.URL);
var title = new String(p.parent.document.title);

window.location = 'http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title=' + escape(title) + '&url=' + escape(url);
</script>


  IE MenuExt などを使って登録すると,IE コンポーネントを利用している RSS リーダなどでも
  右クリックからはてなブックマークに登録できる.

- IE MenuExt
  http://www.uryusoft.com/software/IEMenuExt/