プログラミング についての私的ブログ SIEG XEONG


Navigation of sieg

Index
Information
サイトマップ


最近のエントリー

BLOGinSPACE
インストール型ブログ
セキュリティコード
GoogleSitemapsジェネレータ
サイト探索
Google Sitemaps
Flash programming リンク集
Perl & CGI リンク集
PROGRAMING リンク集
プログラミング言語の種類


Link

ActivePerl
Perlドキュメント(和訳)
Perlデータ構造
Apache JP
Apache 中核機能

ipodnanou_180-150.gif



関連用語 (e-Words)



Opera
rss1.0
rss2.0
atom0.3
BLOGinSPACE

ほっとけない 世界のまずしさ

Opera 9 - Your Web, Your Choice

クリエイティブ・コモンズ・ライセンス
クリエイティブ・コモンズ・ライセンス



2006年04月06日

BLOGinSPACE

宇宙に発信するというちょっと変わったサイトに去年から登録していたんだけど
こんなのが送られてきた! かっこいいので掲載します
ちなみに、当サイト(sieg.xeong.com)内の記事はすべて宇宙に向かって定期的に発信されている・・ようです
詳細はリンク先を
http://www.bloginspace.com/

2005年07月22日

インストール型ブログ

なるべくたくさんのサーバインストール型ブログを集めてみました

使用言語は、Perl、PHP、Pythonがあり
データベースは、MySQL、PostgreSQL、そしていらないものまでありました
いらないものはたぶん、テキスト保存かPerl用のデータベースを使っていると見られます
利用ライセンス形態もさまざまで、GPL(Gnu Open Sorce)、BSD License、
商用は有料だが非商用は無料、そして制限なしというところまであります
また、どこをどう探してもそれらの記述のないサイトもありましたので「制限なし(?)」で示しました

探せばたぶんまだまだあると思うので、まずはパート1ということで
以下18種類を並べてあります

続きを読む : "インストール型ブログ"


2005年07月17日

セキュリティコード

登録認証時のセキュリティコード

登録するときに、画像の文字を入力してくださいっていうのがあります
あれは、自動登録などを防ぐためにあるそうです
「submission code」(サブミッション・コード)とも言うそうです
いまひとつ仕組みがわからないので、自分で考えてみることにしました

約束事として、
HTMLファイルのソースを直接見られても、セキュリティコードがわかってはならない
暗号化するにしても、方法がわかってはならない


[1] まず最初に、かなり回りくどい方法から
これは、HTML,JavaScript,Flash,CGIをつかいます
フローとしては
  1. HTMLファイルを表示
  2. その際JavaScriptで乱数を生成
  3. 生成された乱数をFlashへの引数と次画面(登録CGI)へのhiddenパラメータとして渡す
  4. Flashの方は、受け取った乱数を書き込み用のCGIへ渡し、戻り値として文字列を受け取り表示する
  5. 書き込み用のCGIでは受け取った乱数と更に表示用に生成した6桁の乱数文字列、現在の日付をファイルに書き出し、ここで表示用に生成した6桁の文字列を返す
  6. ユーザはFlashで書き出された文字列を読み入力フィールドに書き送信
  7. 登録CGIでは、受け取った乱数とセキュリティコード、日付の差をファイルと比較、その他の入力項目も確認して真偽を決定
  8. 真なら更に現在の時間フィールドを追加してファイルに保存 (日付超過データを削除)
  9. 真ならユーザに登録内容を確認させて、アクティベーション用のURLを書いてメール送信
  10. アクティベーションURL用のCGIで正規のコードを受け取った時点で先ほどのデータを削除して、ユーザ登録をする
この方法の利点は
 ・HTMLでの表示
 ・このHTMLで見られる乱数は、表示されるセキュリティーコードとはまったく無関係である

欠点として
 ・JavaScriptとFlashが必須
 ・作る側は、かなりめんどうなことになる


[2] 上記のものを改良
これは、Flashを使わずGIFアニメーションを生成する(gifcat.pl使用)
フローはほぼ同じ
Flashの部分をなくして、<img>タグでCGIに乱数を渡す

この方法の利点は
 ・Flashがいらなくなる

欠点として
 ・ばらばらのGIF画像を大量に作っておく必要がある
 ・出かたが変 (gifcat.plの特徴)

考察の余地
Image::Mgickをつかって一つのGIF画像を作成するという手法がある


[3] 更に改良
HTML表示ではなくCGIによる表示 (普通はこっちかも)
これもJavaScript部分をCGIで書き出すだけで、Flashなら[1]とほぼ同じ、GIF画像なら[2]とほぼ同じ

この方法の利点は
JavaScriptがいらなくなる

続きを読む : "セキュリティコード"


2005年07月10日

GoogleSitemapsジェネレータ

前回のサイト探索からの続きで
Google Sitemaps用のXMLファイルを出力するスクリプトを作ってみた(コマンド編)
強調されている行番号は前回(サイト探索)からの変更点

Code: download

  1. use LWP::Simple qw(get head);
  2. use HTML::LinkExtor;
  3. use strict;
  4.  
  5. my(%seen,%mod_time,%out,$site,$top_url,$freq,$priority);
  6. $freq = 'weekly';
  7. $priority = '1.0';
  8. $top_url = 'http://sieg.xeong.com/';
  9. $top_url = "http://$top_url" unless $top_url =~ /^https?\b/;
  10. ($site = $top_url) =~ s/^(http:\/\/.+\/).*$/$1/;
  11. $site .= "/" unless ($site =~ /\/$/);
  12.  
  13. &print_xml_head;
  14. linker($top_url);
  15. &print_xml_foot;
  16.  
  17. sub linker {
  18.  my $base_url = shift;
  19.  my $parser = HTML::LinkExtor->new(undef, $base_url);
  20.  $parser->parse(get($base_url))->eof;
  21.  my @links = $parser->links;
  22.  for my $linkarray (@links) {
  23.   my @element = @$linkarray;
  24.   my $elt_type = shift @element;
  25.   while(@element) {
  26.    my ($attr_name, $attr_value) = splice(@element, 0,2);
  27.    if( $attr_name eq "href" && $attr_value->scheme =~ /\b(https?)\b/ && $attr_value =~ /^$site/
  28.     && ($attr_value =~ /\.xml?$/i or $attr_value =~ /\.s?html?$/i or $attr_value =~ /\.php.*$/i or $attr_value =~ /\.cgi.*$/i)
  29.    ){
  30.     $attr_value =~ s/^(.+)#.*$/$1/;
  31.     next if(defined $seen{$attr_value});
  32.     my @heads = LWP::Simple::head($attr_value);
  33.     if(@heads) {
  34.      $seen{$attr_value}++;
  35.      my @date = $heads[2] ? gmtime($heads[2]) : gmtime(time);
  36.      $mod_time{$attr_value} = sprintf("%04d-%02d-%02dT%02d:%02d:%02dZ", $date[5]+1900, $date[4]+1, @date[3,2,1,0]);
  37.     }
  38.    }
  39.   }
  40.  }
  41.  
  42.  for (sort keys %seen) {
  43.   my $mod = $mod_time{$_};
  44.   s/^(.+\.cgi).*$/$1/i;
  45.   s/^(.+\.php).*$/$1/i;
  46.   if(defined $out{$_}) {
  47.    next;
  48.   } else {
  49.    $out{$_} = 'true';
  50.    print_xml($_,$mod);
  51.    linker($_);
  52.   }
  53.  }
  54. }
  55.  
  56. sub print_xml_head {
  57.  my %in_url = @_;
  58.  my @date = gmtime(time);
  59.  my $mod_time = sprintf("%04d-%02d-%02dT%02d:%02d:%02dZ", $date[5]+1900, $date[4]+1, @date[3,2,1,0]);
  60.  print <<XML;
  61. <?xml version="1.0" encoding="UTF-8"?>
  62. <urlset xmlns="http://www.google.com/schemas/sitemap/0.84"
  63. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  64. xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
  65. http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">\n
  66. <url>
  67. <loc>$top_url</loc>
  68. <lastmod>$mod_time</lastmod>
  69. <changefreq>$freq</changefreq>
  70. <priority>$priority</priority>
  71. </url>\n
  72. XML
  73. }
  74.  
  75. sub print_xml {
  76.  print qq(<url>\n<loc>$_[0]</loc>\n<lastmod>$_[1]</lastmod>\n</url>\n);
  77. }
  78.  
  79. sub print_xml_foot {
  80.  print qq(\n</urlset>\n);
  81. }

続きを読む : "GoogleSitemapsジェネレータ"


2005年07月02日

サイト探索

Google Sitemaps ジェネレーターを作るにあたり、ネットワークから
サイト内のリンクをたどり、同一サイト内のURLを抽出するスクリプトを作ってみた

Code: download

  1. use LWP::Simple qw(get head);
  2. use HTML::LinkExtor;
  3. use strict;
  4.  
  5. my(%seen,%mod_time,%out,$site,$top_url);
  6. $top_url = 'http://sieg.xeong.com/';
  7. $top_url = "http://$top_url" unless $top_url =~ /^https?\b/;
  8. ($site = $top_url) =~ s/^(http:\/\/.+\/).*$/$1/;
  9. $site .= "/" unless ($site =~ /\/$/);
  10.  
  11. linker($top_url);
  12.  
  13. sub linker {
  14.  my $base_url = shift;
  15.  my $parser = HTML::LinkExtor->new(undef, $base_url);
  16.  $parser->parse(get($base_url))->eof;
  17.  my @links = $parser->links;
  18.  for my $linkarray (@links) {
  19.    my @element = @$linkarray;
  20.    my $elt_type = shift @element;
  21.    while(@element) {
  22.      my ($attr_name, $attr_value) = splice(@element, 0,2);
  23.      if(  $attr_name eq "href" && $attr_value->scheme =~ /\b(https?)\b/ && $attr_value =~ /^$site/){
  24.        #   && ($attr_value =~ /\.xml?$/i or $attr_value =~ /\.s?html?$/i or $attr_value =~ /\.php.*$/i or $attr_value =~ /\.cgi.*$/i)){
  25.        $attr_value =~ s/^(.+)#.*$/$1/;
  26.        next if(defined $seen{$attr_value});
  27.        my @heads = LWP::Simple::head($attr_value);
  28.        if(@heads) {
  29.          $seen{$attr_value}++;
  30.          my @date = $heads[2] ? gmtime($heads[2]) : gmtime(time);
  31.          $mod_time{$attr_value} = sprintf("%04d-%02d-%02dT%02d:%02d:%02dZ", $date[5]+1900, $date[4]+1, @date[3,2,1,0]);
  32.        }
  33.      }
  34.    }
  35.  }
  36.  
  37.  for (sort keys %seen) {
  38.    my $mod = $mod_time{$_};
  39. #    s/^(.+\.cgi).*$/$1/i;
  40. #    s/^(.+\.php).*$/$1/i;
  41.    if(defined $out{$_}) {
  42.      next;
  43.    } else {
  44.      $out{$_} = 'true';
  45.      print qq($_ - $mod\n);
  46.      linker($_);
  47.    }
  48.  }
  49. }

続きを読む : "サイト探索"



XEONG.COM

Movable Type