エンジニアが発信する【PHP】の記事を集めました

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【PHP】

2011年11月10日

TPP 何がマズイって、日本の主権が維持できなくなる点が最悪だ

TPP - Fast&Firstのblog風


いつも読んでいる blog にコメント書いた。理解者が増えることを願って。



医療だ農業だと報道されますが、そんなことより
日本の主権が維持できなくなる点が問題です。

海外の企業が日本政府 (いずれ地方自治体にも) に喧嘩をふっかけ、
海外の企業の都合のいいように日本国 がいじくられ、
イジリをやめさせることも、元に戻すこともできなくなります。

戻すには戦争に勝利し、不平等条約を撤回させるしかない・・・・というところまで落ちます。

ぜひ、
集英社新書、中野剛志、TPP亡国論
PHP新書、関岡英之、国家の存亡
等をお読みください。





KDDIが何故cdmaOneでのサービスを始めたか・・・は不勉強なのでわからない。

2011年10月30日

TPP で何を失い、何を得るのか?

TPP で何を失い、何を得るのか?

日本国において、外国の企業が力を持つようになります。日本政府よりも強い力です。(日本国民のためではなく) 外国企業の利益のために日本の法律が変えさせられます。

日本国民のために行動した日本政府を、外国企業が「不利益を被った!」と訴えるようになります。そして日本政府が外国企業へ賠償金を支払うことに。

アジア太平洋の成長を取り込む・・・無理です。他の参加国は、日本に売りたいがために、日本を巻き込もうとしているのです。逆に、他の参加国の内需は小さいので、日本は他の参加国の内需には期待できません。

関税障壁の撤廃により日本の工業製品の (米国への) 輸出が増える・・・増えません。すでに現地生産しています。関税など微々たるもので、効いてくるのは通貨レートです。

バスに乗り遅れる・・・乗らなくて結構。他の参加国はカモ (日本) がネギを背負ってやってくるのを待っているのです。

韓国に負けるな、TPP で挽回するのだ・・・米韓 FTA を呑んだ韓国は破滅します。米韓 FTA の内容は米国のやりたい放題で、韓国にとっては悲惨で残酷なものです。

新聞やテレビではなく、インターネット上の情報を参照してください。

インターネット環境の無い方は書店へ。
集英社新書、中野剛志、TPP 亡国論
PHP 新書、関岡英之、国家の存亡

2011年08月17日

[PHP]自分用のphp.iniを透過的に適用させる方法

phpに独自の設定をしたいんだけど、その方法が分からなくて困っていた。

いくつか方法はあるんだけど、どれも使い物にならない。

※システム/etc/php.iniユーザー~/php.iniとします。

/etc/php.iniを編集するのは論外。

$ /usr/bin/php -d a=1 -d b=2 foo.php

$ echo -e "a=1/\/inb=2" > ~/.php/my-php.ini
$ /usr/bin/php -c ~/.php foo.php

な方法だと動くには動くけど、毎回オプション付きで/usr/bin/phpを実行するハメになる。(=透過的じゃない)

aliasしとけばいいじゃんって話もあるけど、aliasでは#! /usr/bin/phpなファイルの実行には効かない。

(例えば $ pear で良かったものを php -c ~/.php /usr/bin/pear とかせないかん。そんなアホな)

全ての#! /usr/bin/phpなファイルに対して shebangを書き換えたり、コマンド毎にaliasするのもバカバカしい。



で、最近になってやっと見つけたのが環境変数PHP_INI_SCAN_DIR。たすかったー。

これに指定されたディレクトリから*.iniのファイルを読み込んでくれる。やったー。

ただしディレクトリ1個しか指定できない。えーなんでよー。

もしconfigureで--with-config-file-scan-dirが既に指定されていた場合、

PHP_INI_SCAN_DIRを設定するとそっちを読んでくれなくなる。アホー。

なのでシンボリックリンクで華麗にスルー。もーphpはホントに毎回毎回かゆいところに手が届かん、というかクソ。

$ mkdir ~/.php
$ cd ~/.php
$ ln -s /etc/php.d/* .
$ vi my-php.ini # 名前は.iniで終わっていれば何でもいい。
$ export PHP_INI_SCAN_DIR=~/.php

どや

2011年08月01日

Windows + IIS + スクリプト言語は選択としてどうかなと。

先日、Windows Server 2003 R2 + IIS + PHP (php.exe) の組み合わせで PHPが動かない、というトラブルに巻き込まれた。要は「権限がない」ということであった。
どうやら上記組み合わせではそういう事象が発生することがあるらしく、実行モジュールをISAPIにすれば動作したり・・。

また、同じ言語でもWindowsでは使えない命令があったりする。つまり、phpのフル機能は使えないのだ。


通常のWebシステムを構築する場合、Webサーバーでスクリプト言語を選択するなら

・WindowsよりはLinux
・Windowsの際でも、IISよりApache

の方がいいんじゃないかな、と思っている。







  • なうで紹介
  • mixiチェック
  • ツイートする

2011年05月09日

[今週読んだ本のリスト]やっぱ!ネイティブだったらこう言うね、世界一わかりやすい会計の授業、とことんマスター!英文法、だから僕は、Hができない。 3、みんなで考えよう世界を見る目が変わる50の事実、狂乱家族日記 15さつめ

やっぱ!ネイティブだったらこう言うね―仕事に遊びに使える英会話表現503 作者: 松本祐香,ティムナイト,Tim Knight 出版社/メーカー: PHP研究所 発売日: 2004/11 メディア: 新書 この商品を含むブログ (2件) を見る やっぱ!ネイティブだったらこう言うね 世界一わかりやすい会計の授業 作者: 林總 出版社/メーカー: 中経出版 発売日: 2010/02/03 メディア: 単行本(ソフトカバー) 購入: 16人 クリック: 175回 この商品を含むブロ ...

2011年05月08日

スイスの研究機関から 「巨大ドーナツ」が反物質を見つける旅に

「巨大ドーナツ」が反物質を見つける旅に

スイスの研究機関がスペースシャトル「エンデバー」で宇宙の謎を解明するための装置を打ち上げへ。

登場する言葉として「反物質」「CERN(セルン)」と聞けば思い出すのはやはりダン・ブラウンの「天使と悪魔」。
ダン・ブラウンの小説は事実をベースにしているところが多いですが、こんなところも事実に即していたんですね~。
(「CERN」はインターネットWebの生まれ故郷でもあるんですよね~)

ダークマターとは何か、反物質はあるのか、何が見つかるか期待しちゃいます。




天使と悪魔 (上) (角川文庫)

天使と悪魔 (上) (角川文庫)




天使と悪魔 (中) (角川文庫)

天使と悪魔 (中) (角川文庫)

  • 作者: ダン・ブラウン
  • 出版社/メーカー: 角川書店
  • 発売日: 2006/06/08
  • メディア: ペーパーバック



天使と悪魔 (下) (角川文庫)

天使と悪魔 (下) (角川文庫)

  • 作者: ダン・ブラウン
  • 出版社/メーカー: 角川書店
  • 発売日: 2006/06/08
  • メディア: ペーパーバック



天使と悪魔 スペシャル・エディション(1枚組) [Blu-ray]

天使と悪魔 スペシャル・エディション(1枚組) [Blu-ray]

  • 出版社/メーカー: ソニー・ピクチャーズエンタテインメント
  • メディア: Blu-ray



天使と悪魔 コレクターズ・エディション [DVD]

天使と悪魔 コレクターズ・エディション [DVD]

  • 出版社/メーカー: ソニー・ピクチャーズエンタテインメント
  • メディア: DVD



消えた反物質 (ブルーバックス)

消えた反物質 (ブルーバックス)

  • 作者: 小林 誠
  • 出版社/メーカー: 講談社
  • 発売日: 1997/06/20
  • メディア: 新書



反物質―消えた反世界はいまどこに?究極の鏡の謎にせまる

反物質―消えた反世界はいまどこに?究極の鏡の謎にせまる

  • 作者: G.フレーザー
  • 出版社/メーカー: シュプリンガー・フェアラーク東京
  • 発売日: 2002/12
  • メディア: 単行本



宇宙はわれわれの宇宙だけではなかった(愛蔵版)

宇宙はわれわれの宇宙だけではなかった(愛蔵版)

  • 作者: 佐藤 勝彦
  • 出版社/メーカー: PHP研究所
  • 発売日: 2008/08/23
  • メディア: 単行本(ソフトカバー)


2010年12月28日

[PHP]PHPで代理クラス(プロキシクラス)を使って、PHP_CodeSnifferでのERRORをWARNINGとして扱う。

※一般化して例を出したいけどちょっと面倒なので、PHP_CodeSnifferに限った例を出します。


警告は出したいけどERRORほどではない、ってときにWARNINGにしたいのだけど、

PHP_CodeSniffer自体にそういう機能が無いので、自前で何とかしないといけない。

何も考えずに実装しようとすると、該当メソッドをオーバーライドして"addError"の部分を"addWarning"に書き換えるなんてやってしまうのだけど、

<?php
// 親クラス
class Generic_Sniffs_SomeSniff
{
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) {
        // 長い長い記述A
        $phpcsFile->addError($error, $stackPtr);
        // 長い長い記述B
    }
}

// 自前クラス
class My_Sniffs_SomeSniff extends Generic_Sniffs_SomeSniff
{
    // override
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) {
        // 長い長い記述Aのコピー
        $phpcsFile->addWarning($error, $stackPtr);
        // 長い長い記述Bのコピー
    }
}

ってなってしまって、これは本当にお寒い。

DRYに反してるから親クラスに変更があったときに対応するのが非常に面倒。


$phpcsFile->addErrorを呼んだ時に代わりに$phpcsFile->addWarningを呼んでくれれば良いだけなので、どうにかしてaddErrorを書き換えられないかな、と。

以前色々試してPHPでは無理っぽいというのは分かっていたので、ラッパーかませたら何とかなるんじゃないかと思ってやってみたら、とりあえず何とかなった。

<?php
// 親クラス
class Generic_Sniffs_SomeSniff
{
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) {
        // 長い長い記述A
        $phpcsFile->addError($error, $stackPtr);
        // 長い長い記述B
    }
}

// PHP_CodeSniffer_Fileの代理クラス
class PHP_CodeSniffer_File_WarningProxy extends PHP_CodeSniffer_File
{
    private $ref;
    public function __construct(PHP_CodeSniffer_File $phpcsFile) {
        $this->ref = $phpcsFile;
    }
    // method proxy
    private function _proxy()
    {
        $backtrace = debug_backtrace();
        return call_user_func_array(array($this->ref, $backtrace[1]['function']), $backtrace[1]['args']);
    }
    // overrides
    public function setActiveListener() {return $this->_proxy();}
    public function addTokenListener() {return $this->_proxy();}
    public function removeTokenListener() {return $this->_proxy();}
    public function getTokens() {return $this->_proxy();}
    public function start() {return $this->_proxy();}
    public function cleanUp() {return $this->_proxy();}
    public function addError($error, $stackPtr, $code='')
    {
        return $this->ref->addWarning($error, $stackPtr, $code);
    }
    public function addWarning() {return $this->_proxy();}
    public function getErrorCount() {return $this->_proxy();}
    public function getWarningCount() {return $this->_proxy();}
    public function getIgnoredLines() {return $this->_proxy();}
    public function getErrors() {return $this->_proxy();}
    public function getWarnings() {return $this->_proxy();}
    public function getFilename() {return $this->_proxy();}
    public function getDeclarationName() {return $this->_proxy();}
    public function isAnonymousFunction() {return $this->_proxy();}
    public function getMethodParameters() {return $this->_proxy();}
    public function getMethodProperties() {return $this->_proxy();}
    public function getMemberProperties() {return $this->_proxy();}
    public function isReference() {return $this->_proxy();}
    public function getTokensAsString() {return $this->_proxy();}
    public function findPrevious() {return $this->_proxy();}
    public function findNext() {return $this->_proxy();}
    public function findFirstOnLine() {return $this->_proxy();}
    public function hasCondition() {return $this->_proxy();}
    public function findExtendedClassName() {return $this->_proxy();}
}

// 自前クラス
class My_Sniffs_SomeSniff extends Generic_Sniffs_SomeSniff
{
    // override
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) {
        return parent::process(new PHP_CodeSniffer_File_WarningProxy($phpcsFile), $stackPtr);
    }
}

これで、長い長い記述Aのコピーと長い長い記述Bのコピーを書かなくて済むし、親クラスに変更があった場合にも対応不要というわけで素晴らしす。


  • 外部に公開されているインターフェイスは全て委譲しないといけないので、全メソッドオーバーライドという虚しいことしてる。
    マジックメソッド__call使ったら一発で対応できるかなと思ったけど、親クラスに定義されてたらそっちが呼ばれちゃって__callが呼ばれなかった。
  • public function getFilename() {$this->getFilename();}とか書くのがかったるいので、backtrace使って楽した(function _proxy)
  • オーバーライドしてるメソッドの引数は紙面の都合上全部省略してる。E_NOTICE大量に出るから引数書いておいても良い。
  • 実は手元のコードでは全てのメソッドを上書きできるようになってるけど、紙面の都合上割愛。また後日掲載する予定。

2010年12月27日

[PHP]PHPでディレクトリ一覧を取得するスマートではない方法

あるディレクトリに存在するディレクトリ一覧を取得する例。

$dirs = array();
if ($dh = opendir($dirName)) {
    while ($entry = readdir($dh)) {
        if (is_dir($entry) && $entry != "." && $entry != ".." ) {
            array_push($dirs, $entry);
        }
    }
    closedir($dh);
}

こんなんアホらしくて書いてられん。。。

カレントディレクトリならこれでOK。

$dirs = array_slice(array_filter(scandir('.', 0), is_dir), 2);

さて、$dirNameに対応するか。

$dirs = array_slice(array_filter(scandir($dirName, 0), is_dir), 2);

と、これが全くダメ。is_dirがfalse返してくる。

scandirがエントリ名だけ返してくるらしく、CWDから見たらそんなエントリは無いってことになってしまう。

そしてCWDからの相対パスを返してくれるオプションがねぇ。なんなんだよー。perlのFile::Findぐらい融通効かせてくれ。

とりあえずこんなんで行けるっちゃあ行ける。

$cwd = getcwd();
chdir($dirName);
$dirs = array_slice(array_filter(scandir(".", 0), is_dir), 2);
chdir($cwd);

けど、chdirしたくなかったので、

$dirs = (array_slice(array_filter(scandir($dirName, 0), create_function('$entry', 'return is_dir("' . $dirName . '/$entry");')), 2);
/*
$dirName = '...';
$dirs = array_slice(array_filter(scandir($dirName, 0), function($entry){return is_dir("$dirName/$entry");}), 2);
って書けないのもどうかと思うよ!!
*/

って・・・お寒い感じ。。。もうやだこの言語・・・。

2010年11月05日

品質と失敗学

品質(質)というモノと失敗との関わりは深い。世の中には「失敗」を研究する「失敗学会」なるものがある。
http://www.shippai.org/shippai/html/index.php

私自身、とても興味のある分野である。

失敗学とは、私が勝手に定義すると
プロジェクトマネジメント上のリスクの中で「想定外」のリスクを発見したら、それを想定内のことに取込むべく、再発防止の為の方策を考え、実行する、一連の活動
である。


失敗も前向きに捉え、改善できる力こそこれからは必要であろう。しかし、日本ではまだまだ文化的に失敗したことを隠したり、なかったことにしたりしようという「事なかれ」主義的な思想によく出会う。特に大きい組織/安定した組織に属している人はその傾向が強い。
極論ではあると思うが、そういう傾向を打破していかないと、なかなか「品質」は向上しないのかも知れない。




同じテーマの最新記事

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【PHP】

メンバー紹介

タグパネル

ランキング

エンジニアが作る最新ITブログ DODA