がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

………ふぅん

発端は、ここ。
http://q.hatena.ne.jp/1193237125

オブジェクト指向プログラミングの論拠】
現在、PHPオブジェクト指向プログラミングを取り入れようとしていますが、パターンの活用、再利用性といったメリットをあげてもクラスの記述されたファイルの読み込み(includeなどの処理)回数が多くなることや、インスタンス生成による負荷の増大で多くの処理に耐えられないのではという反論があがっています。
メソッド処理は通常の関数と比べて呼び出しが遅いとは聞いていますが、実用に耐えられないものが普及するとは考えられず、これについての反証を探しています。反証内容は、実用に耐えるということです。
webサイトでかまわないので、そういった問題について論理的に解説されているところを教えてください。

なんだかなぁってのが初手の感想。


include…ってか、includeした後のパース処理は、ファイル数以上にPHPプログラムの総数(行数だとちょいと違うし。byte数という言い方が一番よいのかなぁ?)が大きく関わってくるだろうし。
確かにインスタンス生成はそれなりに重い処理だと思うですが。
メソッドのcallは…どうかなぁ。コンパイル系言語ならともかく。


とりあえず正面切った発言をするのであれば「プロファイラでも使ってみたら?」なのでしょうが。
ちょっと斜めから切り込むなら「SmartyとかPEARとか使ってないですか? あれ一通りOOPでっせ」とか。「フレームワーク使ってないですか?」とか。
もうちょっと別の角度から切り込むなら「んじゃC++とかJavaとかでOOPしたら?」とか。


自分の経験の範囲内では、上述の発言を「OOPをきちんと一式出来るようになって実際にやったうえで」発言されたためしがない。
大体が「勉強不足でOOPほとんど把握してない状態ででも勉強するのとか面倒だからなんとなくやだぃ」っていうのがほとんど。
一度味わったら抜け出せなくなるほどの禁断の果実なのにw
…だから本能で拒否ってたりしてw


OOもきっちり議論するとおもいっきし深いですが。
とりあえず、程度に享受出来るメリットも多々あって。その辺の浅瀬なら、結構楽に把握できると思うですがねぇ。
っていうかその辺が便利だから、SmartyでもPEARでも各種Frameworkでも、OOPになってるわけなんでしょうし。


と、見解を述べるふりをしつつしばらくこの質問を見守ってみたくなったので、メモw

fgetcsvがマジシャンな件について

マジシャン(手品師/手妻師/奇術師)は右手を高々とあげてふっと手を振ると、手の中の○○が鮮やかに消えます。
PHPはfgetcsvでCSVファイルを読み込ませると、ファイルの中の日本語が鮮やかに消えます。


………………勘弁してくれ orz


より正確には「”(ダブルクォーテーション)で囲まれていない文字」が消えるです。
ちなみに「部分的に”(ダブルクォーテーション)で囲んだ日本語」も、全滅しました。…まぁRFC違反ではあるのですがねこの書式は(ちなみにCSVRFC周りは以前 ( http://d.hatena.ne.jp/gallu/20060718/p1 )書いたので、よかったらご参照くださいませ)。
日本語の前に半角があると普通に受け取れます。
日本語の途中に半角があると「半角以降」うけとれます。
つまり
-日本語 => -日本語
日-本語 => -本語
となるわけです。
…とりあえずだめぽなのが確定したのでこれ以上は調べません。


あちこち調べてみたのですが。
まず setlocateを使う類のものは、いろいろ実験をしてみた限りでは「有効ではない」と感じられました。
具体的には。たとえば、ファイルをEUCにしたうえで

setlocale(LC_ALL, 'ja_JP.EUC');

と設定しても無駄でした orz
10分程度後の追記

setlocale(LC_ALL, 'ja_JP');

としておくと大分まし。ただ「OKだったりNGだったりな文字列があるらしい(伝聞)」ので、もうひとつ信用は仕切れません。


いくつかのサイトで「splitを使う」という方向性が示唆されてますが、CSVのフォーマット上これは当然ながらNGです。


したがって、残る手段は

  • 日本語はとにかく全部”(ダブルクォーテーション)で囲む

となるわけです。


……………ありえねぇよ orz


とりあえず俺的には「CSVパーサ@MagicWeapon」でカッティングしてからごりょごりょ処理できるですが。
…ほかの人どうするんだべさ?
んと…希望がありましたらcsvパーサまわり貼り付けるので(ちぃとでかいですが)、コメントにでも一言くださいませ。


っつか。マジな話、ほかでfgetcsvとかつかってるところってその辺どうしてるんでしょ?
割と真剣なぞです。

超重要情報:L.root-servers.net の IP アドレス変更

セキュリティホールmemoさん経由
http://www.st.ryukoku.ac.jp/~kjm/security/memo/2007/10.html#20071025_Root
JPRS
http://jprs.jp/tech/notice/2007-10-25-l.root-servers.net.html


ストレートに引用

2007 年 10 月 24 日(米国西部時間)、ルートネームサーバの一つである
L.root-servers.net の IP アドレスが 2007 年 11 月 1 日に変更されるこ
とが、ICANN から発表されました。

Advisory - “L Root” changing IP address on 1st November
October 24th, 2007 by Kim Davies
http://blog.icann.org/?p=227

L.root-servers.net の新しい IP アドレスは 199.7.83.42 となります。現
在既に新しい IP アドレスは運用可能な状態となっており、11 月 1 日のルー
トゾーンにおける変更作業をもって、正式運用が開始されることになります。

発表では、現在の IP アドレス 198.32.64.12 は今後少なくとも 6 ヶ月間に
渡り引き続き参照可能とするとのことですが、移行完了後、最終的にはサー
ビスを終了する予定であるため、11 月 1 日のルートゾーンにおける情報変
更後に各 DNS キャッシュサーバのルートヒントファイルを更新する等の、適
切な対応が必要になります。

新しいルートヒントファイルは 11 月 1 日の正式運用開始後に、以下のURL
から入手できます。

- ftp://rs.internic.net/domain/db.cache
- ftp://rs.internic.net/domain/named.cache
- ftp://rs.internic.net/domain/named.root
- ftp://ftp.internic.net/domain/db.cache
- ftp://ftp.internic.net/domain/named.cache
- ftp://ftp.internic.net/domain/named.root

…やばいちゃんと11月に入ってから思い出せるかなぁ?
不安山盛りてんこ盛りなので、何はともあれ、メモ。

思いっきり覚書

最近触ってるので、とりあえずせっかくなので覚書くらい、と思って。
で、…まぁぶっちゃけTipsです。
また、まじめにホゲったわけではないので、随所に「いい加減さ」が見え隠れしますので、自己責任の下に読んでください(いつものことですが)。


…で、ちょいと私信失礼します。
とりあえずこっちにいろいろ書いておくのでチェックしてください(笑 < 大将さん


大前提として。
おおむね「Webからたたくプログラム」は
install_dir/html/
配下にある*.php
で、テンプレートは、
install_dir/data/Smarty/template/
配下にある*.tpl
がとりあえず対応してます。


また、data/logs/ ディレクトリにエラーログちっくなものがあるので、見てみると面白いかも。


DBハンドルはとりあえず

$conn = new SC_DBConn();

でゲトります。
んでもって。
selectは最悪、自己責任でSQL作ってから(おいらはMWのsecurityクラス使ってるざます)

$res = $conn->getAll($sql);

こんな感じ。
$resには

入ってるっぽいです。
ほかにもいろいろあるですが最悪これだけ把握しとけばど〜にかなります。
2007/10/29 追記
レコードがない場合、array(0)が返ってくるみたいです。


後は、とりあえず

$conn->query($sql);

ひとつあればどうにかなるです。


で、もうちょいこゆいTips。
お題は「顧客情報」。
パスワードの文字列。んと………

$db用string = sha1(ぱすわぁどもぢれつ . ":" . AUTH_MAGIC);

こんな処理がなされています。


ついでに。何に使ってるかよくわからんのですが。secret_keyなるカラムがありまして。
Excelには「暗号化顧客ID」と書かれてるですが、実際には顧客IDをごにょごにょするわけではなく、

  do {
    $secret = sfGetUniqRandomId("r");
//print "$secret \n";
  } while( ($result = $conn->getOne("SELECT COUNT(*) FROM dtb_customer WHERE secret_key = ?", array($secret)) ) != 0);

という処理によってまかなわれています。
また、sfGetUniqRandomIdは
data/lib/slib.php
というファイルで

/* 一意かつ予測されにくいID */
function sfGetUniqRandomId($head = "") {
  // 予測されないようにランダム文字列を付与する。
  $random = gfMakePassword(8);
  // 同一ホスト内で一意なIDを生成
  $id = uniqid($head);
  return ($id . $random);
}

という風に宣言されています。


もひとつ。顧客情報まわりのプログラムを触る場合。
たとえば管理画面でユーザ情報を出力すると

<input type="password" name="password" value="UAhgGR3L" size="30" class="box30"  />

となることに留意しましょう。ここでvalueに設定されているのはdata/conf/conf.phpにあります

define("DEFAULT_PASSWORD", "UAhgGR3L");

という設定です。
また、たとえば html/admin/customer/edit.php などにおいて。

  //-- パスワードの更新がある場合は暗号化。(更新がない場合はUPDATE文を構成しない)
  if ($array["password"] != DEFAULT_PASSWORD) {
    $arrRegist["password"] = sha1($array["password"] . ":" . AUTH_MAGIC);
  } else {
    unset($arrRegist['password']);
  }

といった処理があるのもTipsです。


…って内容、書いとかないと確定で忘れる自信が山盛りにあるので、メモ。

Geekなぺーじ( http://www.geekpage.jp ) というサイトがありまして。
よい感じのねたが多くて好きなのですが。
今回ちょいと二つほど。


言葉遊び
http://www.geekpage.jp/blog/?id=2007/10/14
技術系ならたぶんストレートに笑えます(笑


企業文化が形成される経緯
http://www.geekpage.jp/blog/?id=2007/10/22
サル山のフルボッコ
………結構きっつい内容です。

IPアドレスが使えなくなってる………

本番はともかく、テストではよく
local-part@[IP addresss]
ってメールアドレスを昔から使ってたかと思うのですが。


最近これを使おうとすると、500番系のエラー(Postfixでは5.1.7でした)でつっかえされてしまいます orz


とりあえず、には便利だったのに〜。
という、メモ兼ちょっとだけ愚痴(笑

正しいメールアドレス?

ふらりと「メールアドレスチェックをどうやる?」みたいな話を調べ始めまして。
相変わらずの、メモ。


たぶんきっと多くの方がご存知の
http://www.din.or.jp/~ohzaki/perl.htm#Mail
ここの正規表現は…きっとRFC的にコレクトなのでしょうが(検証もチェックもしてないのであくまで「だと思う」レベルです)。
これをプログラムに書くのは…ちょっとばかり「倦んずあり」という感じです。
大体、最近の携帯メール(具体的には、少なくともDoCoMoAU)、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コマンドとかいう便利なものもあったですがねぇ(メアドの「有効性」確認するなら一番確実ですが)。今、有効にしてるサイトさすがに少ないだろうし。
みんな苦労してるんだなぁと思いつつ、つらりつらりとメモ。