HTML::ColorKeywords を使って chalow の検索をハイライトする

  HTML::ColorKeywords が便利だったので chalow の検索 cgi である clsearch.cgi に色を付けてみた.
  clsearch.cgi はシンプルモードでは黄色のハイライトが付くが,アイテムモードでは付かないので,
  とりあえずアイテムモードでもハイライトするパッチ.

  clsearch.cgi と同じディレクトリに HTML/ColorKeywords.pm を置いておく.

--- clsearch.cgi-orig   2005-01-13 01:34:28.000000000 +0100
+++ clsearch.cgi        2006-02-12 00:25:49.374442000 +0100
@@ -2,6 +2,7 @@
 # $Id: clsearch.cgi,v 1.22 2005/01/13 00:34:28 yto Exp $
 # clsearch.cgi - chalow により HTML 化された ChangeLog を検索する CGI
 use strict;
+use HTML::ColorKeywords;

 ### User Setting from here
 # お好みにあわせて変えて下さい
@@ -66,6 +67,7 @@
 # ■■■ 検索 ■■■
 my $outstr = "";
 my $cnt = 0;
+my @keys;


 sub clean {
@@ -80,7 +82,7 @@
     $key =~ s/\s+$//;
     $key =~ s/^\s+//;

-    my @keys = ($key =~ /(".+?"|\S+)/g);
+    @keys = ($key =~ /(".+?"|\S+)/g);
 #    @keys = map {s/^"(.+)"$/$1/; s/(.)/'\x'.unpack("H2", $1)/gie; $_;} @keys;
     @keys = map {s/^"(.+)"$/$1/; $_;} @keys;

@@ -149,6 +151,10 @@
 }


+if ($mode == 1) { # アイテムモード
+    my $c = HTML::ColorKeywords->new();
+    $c->do(keys => \@keys, string => \$outstr);
+}

 # ■■■ 過去記事表示のための選択棒 ■■■
 my $page_max = int(($cnt - 1) / $numnum);


検索結果キーワードをハイライトする Perl モジュール HTML::ColorKeywords

  http://nais.to/~yto/clog/2006-02-11-1.html

  ハイライトされる色は Yahoo! の Web 検索結果のキーワードの色.
  試してみたら,キーワードの大文字小文字を区別するようなので,区別しないようにした.
  以下,diff.

--- ColorKeywords.pm-orig       2006-02-10 14:27:34.000000000 +0100
+++ ColorKeywords.pm    2006-02-12 00:19:21.571562000 +0100
@@ -30,7 +30,7 @@
     foreach (@frag) {
        next if (/^<.*?>$/);
        s!($self->{keypat})!"<span style=\"background-color:".
-           $self->{colors}->[$self->{key2no}{$1} % @{$self->{colors}}].
+           $self->{colors}->[$self->{key2no}{lc($1)} % @{$self->{colors}}].
            "\">$1</span>"!gie;
     }
     $$sp = join("", @frag);
@@ -38,6 +38,7 @@

 sub _set_regex {
     my ($self, $keys) = @_;
+    @$keys = map {lc($_)} @$keys;
     $self->{keypat} = join("|", map {"\Q".$_."\E"} @$keys);
     %{$self->{key2no}} = map {$keys->[$_]=>$_} (0..$#{$keys});
 }

Perl で TypeKey 認証

  http://memo.xight.org/2006-01-18-4

  Authen-TypeKey は手軽でよさげ.

use CGI;
use Authen::TypeKey;

my $q = CGI->new;
my $tk = Authen::TypeKey->new;
$tk->token('typekey-token');
my $res = $tk->verify($q) or die $tk->errstr;


- Authen-TypeKey
  http://search.cpan.org/~btrott/Authen-TypeKey-0.05/lib/Authen/TypeKey.pm

たくさん use するかわりに、"Toolkit" につめこもう!

  http://e8y.net/blog/2006/02/03/p114.html

  perl でスクリプトを書くときに先頭に並ぶ use を一つにまとめてしまおう的モジュール.
  よく使う処理群をまとめて書いておくと使いまわしが効くかも.

- Toolkit - Keep your handy modules organized - search.cpan.org
  http://search.cpan.org/dist/Toolkit/lib/Toolkit.pm

フリーで読める PHP,Perl,XML,Web Services,LIPS,.NET などのオンライン書籍

  http://apress.com/free/

  • A Programmer's Introduction to PHP 4.0
  • Writing Perl Modules for CPAN
  • Google, Amazon, and Beyond: Creating and Consuming Web Services

  などが PDF で公開されている.

アップロードの進捗状況をプログレスバーでみることができる Mega Upload Progress Bar

  http://www.raditha.com/php/upload.php

  PHP,Perl,JSP から使うことができるファイル・アップローダ.
  ライセンスは Mozilla Public License 1.0 (MPL).

  Firefox で Tab Mix Plus などでウィンドウを常にタブで表示させている場合は挙動がおかしい.
  あと,インストールが面倒くさい.

- 進捗状況
  Mega Upload Progress Bar

- アップロード完了
  Mega Upload Progress Bar

chalow が吐き出す RSS の dc:creator にメールアドレスが入る件

  chalow が吐き出す RSS の dc:creator に思いっきりメールアドレスが入っていた.
  メール収集ロボットとかのこともあるので,メールアドレスの部分はカットすることにした.

--- ChangeLogReader.pm-orig     2005-08-10 04:31:46.000000000 +0200
+++ ChangeLogReader.pm  2006-02-05 19:12:34.521300000 +0100
@@ -71,6 +71,7 @@
     $self->{all}->{$ymd}->{eh} = $ymd;
     my $entp = $self->{all}->{$ymd};

+    $user =~ s/<.+?>//g;
     $user =~ s/</&lt;/g;
     $user =~ s/>/&gt;/g;
 #    print "($ymd, $y, $m, $d, $user) \n";

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 を起動していることがわかった.
  なるほどね…

  サンプルはこのサイト.

perl でインタラクティブなシェルを実現する perlsh

  http://d.hatena.ne.jp/secondlife/20060111/1136975310

  Term::ReadLine::Gnu に含まれている perlsh.

\Term-ReadLine-Gnu-1.15\eg

  にファイルがある.make install ではインストールされないので,手動でパスの通ったところに置く必要がある.

  似たようなことは,Perl のデバッグモードでもできるけど,perlsh の方が便利.

% perlsh
main[1]$ @ary = qw(1 2 3 4 5)
1
2
3
4
5
main[2]$ map { $_ * $_ } grep { $_ % 2 } @ary
1
9
25

  同じことを Perl のデバッグモードですると以下のような感じ.

% perl -de 1

Loading DB routines from perl5db.pl version 1.25
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(-e:1):   1
  DB<1> @ary = qw(1 2 3 4 5)

  DB<2> foreach (@ary) { print $_, "\n" }
1
2
3
4
5

  DB<3> @ary2 = map { $_ * $_ } grep { $_ % 2 } @ary

  DB<4> foreach (@ary2) { print $_, "\n" }
1
9
25

- Term::ReadLine::Gnu
  http://search.cpan.org/~hayashi/Term-ReadLine-Gnu-1.15/Gnu.pm

- perlsh
  http://search.cpan.org/~hayashi/Term-ReadLine-Gnu-1.15/eg/perlsh

- perldebug - Perl debugging
  http://perldoc.jp/docs/perl/5.6.1/perldebug.pod

SSH や FTP のブルートフォースアタックをブロックする Perl スクリプト sshit

  http://anp.ath.cx/sshit/

  auth.log を見て攻撃があったら pf や ipfw にルールを追加してブロックする.

- via: cubic9.com
  http://cubic9.com/Blog/2006-01-11/#i93fcc51a