アーカイブ - 7月, 2010



2010年 7月 28

GD のインストールに散々悩んだあげく、あきらめかていたけど、
http://tech.hitsug.net/?CentOS%2FPerlモジュール
このページに rpmforge レポジトリを使った yum でのインストールが載っていたので試したら一発で出来た。。。

yum --enablerepo=rpmforge install perl-GD

いろいろな要因があるのだろうけど。


Filed under: perlモジュール

Trackback Uri






2010年 7月 2

Email::Valid

http://search.cpan.org/~rjbs/Email-Valid-0.184/lib/Email/Valid.pm

現在でも更新されている感じのモジュール。携帯向けに Email::Valid::Loose と言うモジュールもある(有名なMIYAGAWAさん作)通常ならばこのモジュールでいいと思う。

Mail::CheckUser

http://search.cpan.org/~ilyam/Mail-CheckUser-1.21/CheckUser.pm

Data::Dumper の作者らしい。18 Sep 2003 となっているので更新はだいぶ前。でもこのモジュールはなかなか良くて、存在ユーザーをある程度(?)調べてくれる。存在ユーザーのチェックは送信先のメールサーバの設定によって違うのかもしれない。ソースに
## gTLD Wildcard IPs
$NXDOMAIN= {………}
って感じでトップレベルドメイン(?)のAレコードやらCNAMEと思われるものが定義されているけど、これって更新されないのかなぁ?

で、こちらのモジュールでは携帯向けのアドレスで @ の前に . が付くもの(abc..@docomo.ne.jp など)は使えません。RFC822違反だそうです。

そこで Mail::CheckUser::Loose なるモジュールを作成・・・した訳ではないけど、リメイクして使いました。

自分の環境では /usr/lib/perl5/site_perl/5.8.5/Mail/CheckUser.pm でしたので、/usr/lib/perl5/site_perl/5.8.5/Mail/CheckUser と言うディレクトリを作り、その中に CheckUser.pm をコピペして Loose.pm にリネーム。

その Loose.pm を数カ所変更するだけです。

7行目付近

package Mail::CheckUser;
↓ ::Loose を追記
package Mail::CheckUser::Loose;

190行目付近

sub last_check() {
    return $Mail::CheckUser::Last_Check;
}
↓ ::Loose を追記
sub last_check() {
    return $Mail::CheckUser::Loose::Last_Check;
}

214行目付近

my $STRING_RE = ('[' . quotemeta(join '',
                                 grep(!/[<>()\[\]\\\.,;:\@"]/, # ["], UnBug Emacs
                                      map chr, 33 .. 126)) . ']');
↓ \. を削除
my $STRING_RE = ('[' . quotemeta(join '',
                                 grep(!/[<>()\[\]\\,;:\@"]/, # ["], UnBug Emacs
                                      map chr, 33 .. 126)) . ']');

244行目付近

    my $resolver = $Mail::CheckUser::Net_DNS_Resolver || new Net::DNS::Resolver;
↓ ::Loose を追記
    my $resolver = $Mail::CheckUser::Loose::Net_DNS_Resolver || new Net::DNS::Resolver;

スキル不足で継承とかよくわからないので(汗

use Mail::CheckUser::Loose;
my $check_email='h.o.g.e.@docomo.ne.jp';

$Mail::CheckUser::Loose::Timeout = 15;
$Mail::CheckUser::Loose::Treat_Timeout_As_Fail = 'true';

if(check_email($check_email)) {
    print "有効なアドレスです。";
}else {
    print "無効なアドレスです。",last_check()->{reason};
}

こんな感じで使ったりしてます。

以下修正後の全ソース

.. continue reading ..


Filed under: perlモジュール

Trackback Uri






2010年 7月 1

IEの6,7,8を判別するJavascript
JavaScriptでIEかどうかをたったの1行で判別する方法

この両者のスクリプトを合わせてみた。
ライブラリを使いたくない(or使えない)状況で役に立つかも。
ちなみに「IEの6,7,8を判別するJavascript」のコードは間違っていたので少々修正。

if (typeof document.body.style.maxHeight != "undefined") {
    if (!/*@cc_on!@*/false){
        // Not IE.
        alert('Not IE.');
    }else if (document.documentMode >=8) {
        // IE8
        alert('IE8');
    }else {
        //IE7, IE8(IE7 mode)
        alert('IE7, IE8(IE7 mode)');
    }
} else {
    // IE6, older browsers
    alert(' IE6, older browsers');
}

Windows XP の IE8、IE7、FireFox、Chromeで確認OK.
Mac の Safari、FireFox、Opera、Chrome でもOK.


Filed under: JavaScript

Trackback Uri






2010年 7月 1

相変わらずクソな実装のIE。
他のブラウザで全部動くのにIE 7.0 以下の挙動はホントにクソ。
先人の方々に感謝感激雨あられですわ。

IEでのgetAttribute,setAttributeのバグ

// NG
element.getAttribute("class");
element.setAttribute("style", "background-color: #fff; color: #000;");
element.setAttribute("onclick", "clickHandler(event);");

// OK
element.getAttribute("className");
element.style.cssText = "background-color: #fff; color: #000;";
element.setAttribute("onclick", new Function("clickHandler(event);"));

IEでsetAttribute()とremoveAttribute()がうまく動かない問題 (ウップス!!なかわけ)

しかも、かなり重要なことを発見しました。

属性名を小文字で書かないとうまく動かない!!(IE7で確認)

setAttribute("onClick", new Function(""));

ではダメなのです。うまく処理されません。

setAttribute("onclick", new Function(""));

あー、これも引っかかってたわ。

ただし、上記の対応をすると他のブラウザで動かない。IE8 でもエラーが出る。IE 7以下用に振り分けないとダメなのか。。。

まぁ、そろそろIE7以下は捨ててもいいよ・・・ね?

結局

ベタにHTMLを document.write() で書けばいい訳で・・。
クロスブラウザにするには手間ががかかる・・。


Filed under: JavaScript

Trackback Uri






2010年 7月 1

以前に配列をシャッフルの記事( http://perl.no-tubo.net/2010/01/08/pelrで配列をシャッフル/ )を書いたのだけれど、その時にコメントで List::Util を使いましょうよ、と頂いた。

そういうものもあるのか、と思っていたのだけれど理由があったので軽く調べてみた。

perl を書く時には配列処理と言うのはよく使うので、メモとしてエントリー。

配列処理をするモジュール List::Util

配列処理に置いて同じような処理は自前で書いても書けない事は無い。ただし、コアモジュール List::Util は C(XS) で実装されている(?)ので多量の処理になるほど実行速度に差が出る。

ベンチマークをとって比較しているエントリー
配列のしゃほぅ!のベンチマーク

上記エントリーにはシャッフルのベンチマークのみだけど、きっと他の処理でも違いがあるのだろう。

もっとたくさんの処理を使える List::MoreUtils

List::MoreUtils を使うとさらに多くの配列処理を使用出来る。
簡単なリファレンス
List::MoreUtils – List::Utilに含まれない関数群 – あじゃぱー

インストールに関して注意点があるようです。
YellowStore: [Perl]List-MoreUtils-0.24はPerl5.8.8以前には入らない


Filed under: perl,perlモジュール

Trackback Uri