正しいメールアドレス?
ふらりと「メールアドレスチェックをどうやる?」みたいな話を調べ始めまして。
相変わらずの、メモ。
たぶんきっと多くの方がご存知の
http://www.din.or.jp/~ohzaki/perl.htm#Mail
ここの正規表現は…きっとRFC的にコレクトなのでしょうが(検証もチェックもしてないのであくまで「だと思う」レベルです)。
これをプログラムに書くのは…ちょっとばかり「倦んずあり」という感じです。
大体、最近の携帯メール(具体的には、少なくともDoCoMoとAU)、RFC準拠してないし。
まぁ上述URIの下のほうに現実的なのも載ってますが。
それ以外ですと
http://d.hatena.ne.jp/j0hn/20070602
とか
http://catbot.net/blog/2007/06/re_php.html
とかを参考にあげておきたいなぁと。
微妙関係ないですが「DNS引いてドメインの有効性チェックまでやるsymfony」にちょっとラブリーなものを感じてしまいましたw
個人的には…domain-partは、正規表現簡単だと思うですよ。
で…local-part。…あれは無法地帯だし(苦笑
なので、domain-partは厳密に、local-partは大雑把に、ってのが基本指針でいいんじゃないかなぁとか思う今日この頃。
昔々はVRFYコマンドとかいう便利なものもあったですがねぇ(メアドの「有効性」確認するなら一番確実ですが)。今、有効にしてるサイトさすがに少ないだろうし。
みんな苦労してるんだなぁと思いつつ、つらりつらりとメモ。
SimpleTest便利ざます〜
いわゆるUNIT test系のプログラムなのですが。最近 SimpleTest がいたくお気に入り。
理由は「インストールがシンプルだから」。
とりあえず
http://simpletest.sourceforge.net/
からダウンロード。tar ballがゲトれるはずなので、解凍して適当なディレクトリにほぉりこんで終わり。
ああなんてシンプルw
使い方のサンプルは
http://blog.zuzara.com/2007/03/01/194/
とか
http://project-p.jp/halt/kinowiki/php/SimpleTest
とか
http://project-p.jp/halt/kinowiki/:WD_29/SimpleTest/%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E4%B8%80%E8%A6%A7%E3%81%A8%E4%BD%BF%E3%81%84%E6%96%B9
とか
http://www.geocities.jp/toyprog/simpletest/first_test_tutorial.html
とか参照。
うるとら大雑把に書くと
<?php
require_once(simpletestが入ってるディレクトリ . 'unit_tester.php');
require_once(simpletestが入ってるディレクトリ . 'reporter.php');
require_once(テストしたいクラス);
class てけとうなクラス名 extends UnitTestCase
{
public function __construct()
{
$this->UnitTestCase();
}
public function 適当なメソッド名()
{
// テストしたい内容をご自由に
}
} // end of class
$test = new てけとうなクラス名;
$test->run(new HtmlReporter());こげな感じ。
内部のメソッドは複数あってもOK。勝手に探し出してくれるらしい。
でも順番とか考えると、あんまりこねくり回さずに1メソッド集約のほうが楽な気もする。
この辺まだちゃんとホゲれてないので、よいアイデアあったら突っ込みよろです。
んで。肝心のテスト方法ってか記法。
とりあえず極めてよく使ってるのが
assertEqual($result, $ans);
$result == $ansがtrueならOKしてくれる………ってまて。2a問題考えると微妙怖いぞ?
実験。結果。………予想通り orz
近いのを探す。光の速さで発見。
assertIdentical($result, $ans);
===なので、2a問題も平気…なはづ。
実験。結果。………予想通りよっしゃ!!
っつわけでとりあえず気を取り直して。
…っても、あと使うのは…
assertNull($value);
が、ようは「値がnullならok」してくれる。これの逆が
assertNotNull($value);
くらい?
なんでか、assertTrue はあまり使いませぬ。assertEqual………もとい、assertIdenticalで片付いてしまうので。
後は、ファクトリ系とかで使うのが
assertIsA ($obj, $type);
ようは「$objが$typeクラスに属してる(当人または子クラス) ならtrue」ってやつです。
厳密には、例外投げたときとかもいろいろやりたいんだけど(あるかもしれないんだけど調べてない)。
とりあえず近々に使う程度にゃ上述のメモで十分かと。おいら的には。
いぢょ。相変わらずのメモ書き〜
telnet経由でSMTP叩くとき用メモ
telnetで25番叩いてから
HELO teketouna.domain MAIL FROM:<from@mail.address> RCPT TO:<to@mail.address> RCPT TO:<cc@mail.address> RCPT TO:<bcc@mail.address> DATA 送りたいメールをヘッダからどんぞ。 .
ポイントは、DATAの後の「先頭に.で改行」。
でも本当のポイントは「MAIL FROMとかRCPT TOとかの直後の:」(すっかり忘れててここで引っかかってググってここに書く気分になったからw)
HELOふるいよねぇ普通EHLOだよねぇとかって突っ込みはなしの方向で(笑
以上相変わらず思いっきりメモ。
includeの順番とか
んと…最近、とみにPHPの人様のコードを読んで思うのが…端的に一言で片付けると「思想が継承されてないんだか自分の思想が古いんだか」。
ちとうまく説明できる自信があまりないので、時間軸にそって順番に。
昔々。もう二桁ほども年をさかのぼったころに、いわゆるCOBOLとかをやっているような現場で身に着けた知識なのですが、もともとは。
それなりの規模のテストをするときに。
まぁいわゆる.soとか.dllとか、そのあたりに相当する、ロードモジュールってのがあったです(今もこの名前があるのかはよく知りませぬ)。
でまぁ、ロードモジュールってのは各プログラムごとに作るので。バグとかがあると、適宜ソース直してコンパイルしてロードモジュールを入れ替えたりするわけなのですが。
当然「プログラムしくじる可能性」もあるわけで。
まず、以下のようなディレクトリたちを用意してたです(名前はかなりアバウトなのと、実際にはもうちょっと深い階層構造してました)。
- ドラフトテスト
- 公式テスト
- フィックス
とりあえず「開発者個人がテストしたい」場合、ドラフトテストのディレクトリにコンパイルしたロードモジュール突っ込んでテストするです。
そうすると、実行する一通りのロードモジュールは「フィックス(または公式テスト)」から読み込まれるですが。「ドラフトテスト」に同名のロードモジュールがある場合、そっちを優先して読み込むです。
つまり「ほかは入れ替えずに自分がテストしたいモジュールだけ入れ替えてテストができる」です。
で。
自分のテストが終わったら、とりあえず何はともあれ「ドラフトテスト」ディレクトリはきれいに空っぽにするです。
そうすると、ほかの人は「すでに公式にフィックスしているロードモジュール」がちゃんと使えるです。ディレクトリパーミッションとか間違えなければ「間違えて上書き」とか「削除」とかの心配もなっしんぐ。
で、自分でテストしてOKだなぁって思ったらソースコードを管理者(…おいらがやってました恐ろしいことに)に頼んでUpしてもらい、正式にコンパイル。この時点でのロードモジュールは「公式テスト」ディレクトリ。
で、専門のテスト屋さんがテスト。バグが直るとその辺が書類になって出回ってきて、最終的にOKならフィックス。ロードモジュールもフィックスディレクトリにぶち込まれます。
このやり方の便利なのは「とりあえずテストして」「やばかったらそのファイル消せばすぐに挙動が戻る」こと。ついでに「本番(っても開発中のブツですが)に影響する角度での消し間違い」がありえないこと。
ここでこの文書書いた理由その1。
………この手法の名前忘れた;;
誰か覚えてる方とかいたら是非突っ込みお願いします orz
おいといて。
最近開発してて思うですが。こういう手法が、あんまり出回ってないような。
なので、includeの順番で「優先順位の高いドラフトなディレクトリ用意していったん上書きして…」とか考えても、最近の人様のソースを見ると「ディレクトリ固定〜」とかが多くて、どうやろうか時々躊躇してしまうです。
実際問題。MWでは set_include_path とかをPHPの場合使ってるのですが。…あんまりよそで見たことがない(苦笑
この辺の「includeディレクトリの優先順位による解決(仮称)」を使わないのが、知識の継承不足なのか、なにか「この辺まずいぢゃん」てな理由があってなのかがちょいと興味があったので、メモ&考察。
ものすごくダメないい話
いまジャスト、TVで、笑福亭鶴瓶さんと武田鉄矢さんが話をしていた、ものすごくダメくさいいい話。
# 記憶で書いてるので語尾とかかなり違います
最近の子って、たとえば漢字がわからないと携帯で調べるらしいんだよ。
でも、辞書で調べると違う文字も目に入ってくるでしょ? それがいいんだよね。
たとえば中学生くらいのころって、やらしい漢字とか調べるじゃないですか。
交わるって調べると、性交とか出てくる。
性交!?
性と交ですよw
で、性交を調べると愛撫とか出てくる!?!?
そうやって興奮して、つなげていくんです。
うん調べるってこういう事だと思う。
だから、よく、うちの子達にいうのが。
「もう一歩だけ深く、あるいは広く調べてごらん?」って。
その一歩の積み重ねが、いつか幅広いスキルにつながるので。
それにしても…いい話をここまで下品に語れるお二人ってば、なんかすごい(笑
# あるいはそうは見えないかもしれませんが。ストレートに絶賛してますw
単純な質量ってこれだから嫌いだ;; 郵便番号の場合
郵便番号から住所引っ張ってくる単純なモノを作ろうと思ったですよほらあちこちで必要ですし。
とりあえずメモリ上に取り込もうかなぁと雑に構想を練る。
郵便局からげとった、CSVのファイルサイズ。12,070,171バイト。
光の速さでメモリ上への蓄積は却下。
パースコストだけでも頭痛が痛いざます。
なんとなく。なんとなく、DBMSを使いたくない気分。
ディレクトリ使ってハッシュっぽい考え方で片付けるのが一番かなぁとか思いつつ………なんとなく踏ん切りがつかない今日この頃。
脳裏によぎるISAMの4文字。
…PHPで扱う手段が見当たらない。
ftrancateあるなぁfseekあるなぁ。
…まさかとは思うが、でっかいファイルでバイナリ扱いするか?
…でもこれ以上ファイルサイズ肥大化させても、それはそれで扱いにくいような…
多分、
上三桁 / 中二桁 / 下二桁.csv
とかってやると、検索は一瞬だしよい感じのはずなのだが…気分が乗らないのはなぜだべさ?
答え。後メンテ面倒だから。
1ファイルで処理したいけどどう考えても現実的なサイズぢゃないし。
…しばらく悩んでみよう。
ほら、誰かがいいアイデアくれるかもしれないしw