Perl と ImageMagick を使って画像を HTML の table に変換

- ImageMagick で画像を HTML に変換
  http://blog.shebang.jp/archives/50279808.html

  というのをみて,そういえば大分前に似たようなのを作ったので紹介しておこう.

#!/usr/bin/env perl
# tableart - 画像ファイルからテーブルアートを作成

use strict;
use warnings;
use Image::Magick;

my $image = readImage();
my ($width, $height) = $image->Get('width', 'height');

print qq(<table border="0" cellpadding="0" cellspacing="0">\n);    
for (my $h = 0; $h < $height; ++$h) {
    my @colors = ();
    for (my $w = 0; $w < $width; ++$w) {
        my @pixel = split /,/, $image->Get("Pixel[$w, $h]");
        my ($r, $g, $b) = map { sprintf '%02x', ($_ > 0) ? int($_ / 256) : 0; } @pixel;
        push @colors, "#$r$g$b";
    }
    print qq(<tr>\n);
    map { print qq(<td width"1" bgcolor="$_"></td>\n); } @colors;
    print qq(</tr>\n);
}
print qq(</table>);

sub readImage {
    my $image = new Image::Magick;
    if (@ARGV >= 1) {
        # ファイルから画像を読む
        $image->ReadImage($ARGV[0]);
    } else {
        # 標準入力から画像を読む
        $image->ReadImage('-');
    }
    return $image;
}


  大分前に作ったので若干のダサさは残るけど,これでいわゆるテーブルアートを作ることができる.

- テーブルアート(HTML タグ) のページ
  http://hinoki.sakura.ne.jp/~okada/table/

chalow にタグ (カテゴリ) の一覧を視覚化する機能をつけてみた

  トップページ右側のカレンダーの下に設置してみた.
  よくある感じの,タグの視覚化.

  タグの視覚化

  タグの個数から偏差値を算出してフォントサイズ及び前景色を決定しています.
  フォントサイズを算出するところの数式がよく分からなかったので某田上氏に聞いたらあっさり
  解決してくれた.感謝.

  このサイトの傾向が少しでもわかるかもしれないけど,タグを設定していないエントリも多々あるので
  あまり意味はないかもしれませんね.

  ソースは汚い上に,なんか適当すぎて無駄も多いので出したくないんだけど,ここまで書いておいて出さないのも
  あれなので,いやいやながら公開しておきます.

sub create_tag_list {
    my @tags = ();
    my ($max_font_size, $min_font_size) = (24, 9);
    my ($sum, $sum_sq) = (0, 0);
    my ($max, $min) = (0, 9999); # 超 adhoc
    my $i = 0;
    # 平均値と標準偏差を算出
    foreach my $cat (keys %{$cl->{CAT}}) {
        my $n = $cl->{CAT}->{$cat};
        $sum += $n;
        $sum_sq += $n ** 2;
        $i++;
    }
    return if ($i <= 1);
    # 平均値
    my $avrage = $sum / $i;
    # 標準偏差
    my $stdev = sqrt(($sum_sq - $sum ** 2 / $i) / ($i - 1));

    # 偏差値の最大値と最小値を算出
    foreach my $cat (sort keys %{$cl->{CAT}}) {
        my $dev = $cl->{CAT}->{$cat} - $stdev / $stdev * 10 + 50;
        $max = $dev if ($max < $dev);
        $min = $dev if ($min > $dev);
    }

    # フォントサイズと色を決定
    foreach my $cat (sort keys %{$cl->{CAT}}) {
        my $n = $cl->{CAT}->{$cat};
        my $dev = $n - $stdev / $stdev * 10 + 50;
        my $font_size = sprintf('%.1f', ($max_font_size - $min_font_size) * ($dev - $min) / ($max - $min) + $min_font_size);
        my $color;
        if (($max_font_size + $min_font_size) / 3 * 2 < $font_size) {
            $color = '333';
        } elsif (($max_font_size + $min_font_size) / 3 < $font_size) {
            $color = '666';
        } else {
            $color = '999';
        }
        push @tags, sprintf('<a href="%s" style="color: #%s; font-size: %.1fpt;">%s</a>', get_category_filename($cat), $color, $font_size, $cat);
    }
    return join("\n", @tags);
}


  これを適当な位置,例えば,

write_category_list_file();    # カテゴリ一覧を作る
my $tag_list = create_tag_list();


  のように,write_category_list_file() の下辺りで呼び出しておいて,
  各ページを組み上げるところで,以下のようにテンプレート変数に渡してあげれば,使えるようになります.

$t->param(tag_list => $tag_list);

100 人分のパスワードを生成する Perl ワンライナー

perl -e 'for (1..100) { for (1..8) { print((0..9,a..z,A..Z)[int rand 62])} print "\n" }'

  まあ,これで OK と.
  ただ,パスワードに「0 (ゼロ),1 (イチ),I (大文字のアイ),l (小文字のエル),O (大文字のオー)」
  なんかが含まれているとフォントによっては全然判別できないので,

perl -e 'for (1..100) { $p = ""; for (1..8) { $p .= (0..9,a..z,A..Z)[int rand 62]} $p =~ tr/01IlO/vwxyz/; print "$p\n" }'

  のように,tr で変換してあげた.

JavaScript のソースコードを綺麗に整形してくれる Perl モジュール JavaScript::Swell

  http://search.cpan.org/~yappo/JavaScript-Swell-0.01/lib/JavaScript/Swell.p ...

  Web 2.0 時代にはもってこいですよと.

- via: YappoLogs
  http://blog.yappo.jp/yappo/archives/000343.html

ファイル名の文字コードを変換する convmv

  http://j3e.de/linux/convmv/man/

  SJIS のファイル名を EUC-JP に変更するには

convmv -r -f sjis -t euc-jp * --notest

  -r で再帰的に処理を行う.

Perl Best Practices

  0596001738
  http://www.amazon.co.jp/o/ASIN/0596001738/todaysnonsenc-22/ref=nosim/
  Damian Conway (著)
  Oreilly & Associates Inc
  ISBN: 0596001738
  2005/08
  4,216 円

- via: TokuLog!
  http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/2138.html

Perl の DateTime モジュール

- DateTime への移行
  http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/2145.html

- DateTime のラッパー
  http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/2154.html

- DateTime::add は破壊的
  http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/2153.html

  DateTime::add は注意する必要がありそうだけど,DateTime に移行してみる.

hostip.info を利用する Perl モジュール WWW::HostipInfo

  http://www.donzoko.net/cgi-bin/tdiary/20051008.html#p02

  IP アドレスから国名と都市名を取得できる hostip.info の API を利用する Perl モジュール.

- WWW-HostipInfo
  http://search.cpan.org/dist/WWW-HostipInfo/

- hostip.info
  http://www.hostip.info/

はてな記法をパーズする Perl モジュール Text::Hatena

  http://search.cpan.org/dist/Text-Hatena/

- via: www.textfile.org
  http://www.hyuki.com/t/200509.html#i20050930124733

  ハテナの近藤さんによるもの.

use Text::Hatena;

my $parser = Text::Hatena->new;
my $text = 'foo';
$parser->parse($text);
print $parser->html;


  とっても,簡単.
  ただし,現状ではリンクは解釈できないみたい.
  サニタイズもできない.
  とりあえず,Text/Hatena/Node.pm にサニタイズするメソッドを追加して,
  サブクラスで読み込むようにしてみたけど,なんかいい方法がありそう.

人間フレンドリーな表組み出力を出力する Text::ASCIITable

  http://e8y.net/blog/2005/09/16/p88.html

- via: 読書記録ChangeLog
  http://dkiroku.com/2005-09-24-14.html

- ref.: Text::ASCIITable
  http://search.cpan.org/dist/Text-ASCIITable/ASCIITable.pm

  何かに使えそう.