PHP フレームワーク乱立に終止符!?
CakePHP 関連の書籍が続々と発行されており、書店に立ち寄るたびに新しいCake本を目にします。
1、2年前までは Zend Framework が大本命と言われていましたが、2009年4月の段階では CakePHP が PHPフレームワークのデファクトになった感さえあります。
真夜中ナビ 深夜営業のお店探しはネイティブPHPから移行できてない状態ですが、他社様の案件や自社の新案件は殆どすべて CakePHP で作っています。
理由はWEBアプリケーションの根幹ともいえるCRUD処理に関するコーディング量が劇的に減り、開発&メンテナンスが驚くほど簡素化されることです。
フォーム関連処理が貧弱、同機能がバージョン間で全く異なるシンタックスだったりと、フレームワークとしては発展途上ですが、ケーキはやっぱり旨いです。(うまいこと言ったようで、言えてない…orz)
PHP使いはもう正規表現をblogに書くな
PHPer(?)のハシクレとして、小飼弾のブログ記事 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ を興味深く読みました。
かなり使えるPHPの正規表現まとめという記事中にダメ正規表現があるとのこと。さらには、PHP周辺ブログにダメ正規表現が多いとのこと。
確かに上のブログ記事中の正規表現は実用に足るレベルのものではないので、正規表現の勉強目的だとすれば良い記事になりそうです。
-
- -
PHPには WordPress, EC Cube 等の実用アプリケーション、 PEAR, ZendFramework, CakePHP 等のライブラリ/フレームワークなどの中に数え切れないほどの“使える/使われている正規表現”があります。
PHPを使う際には中途半端なまとめ記事ではなく、そういうところから技を盗む習慣が大切だと思います。
Aptana の導入メモ / PHP開発環境
PHP の開発環境というと、テキストエディタ(無償/有償)、Dreamweaver(有償)、Eclipse系(無償)、PHP専用の開発環境ソフト(無償/有償)など人それぞれだと思われますが、Eclipse 系 IDE の Aptana を紹介します。
※ オススメというわけではなく、単に選択肢のひとつとしてのメモにすぎません。開発環境は個人の使いやすいものがベストだと思います。
-
- -
2008年12月にJavaScript, HTML/CSS などのWebデザイナー向けのIDE「Aptana」にPHP開発環境( PHP Development Environment 1.0 )が追加されました。
参考:Aptana PHP 開発からデプロイ、運用まで支援最新ツール登場
以下は、Aptana を Windows(Vista)で使用する際の導入メモとなります。
1. Aptana Studio のインストール
Download Aptana Studio からダウンロード&インストール。ウィザードでインストールできるので道なりです。
インストールしたのは、2009年2月現在の最新バージョン: Aptana Studio 1.2.1
※ Aptana は Eclipse 系 IDE なので、JDK がインストールされてないと動かないかもしれません。以下、JDK はインストールはされているものとします。
2. 日本語化
Eclipse の日本語化プラグイン Pleades を使用して日本語化します。
Pleiades のダウンロード
解凍後、インストールした Aptana_Studio の plugins, features フォルダを Pleades の同名フォルダで追加上書きします。
さらに Aptana Studio をインストールしたフォルダにある AptanaStudio.ini というファイルをテキストエディタで開いて最後の行に以下の一行を追加します。
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=default.splash
以上で Pleades による日本語化ができます。
3. EUC-JP, Shift-JIS の文字化け対策
文字コードとしてEUC-JP, Shift-JIS を使用している場合には Aptana で編集しようとすると、文字化けして編集できないことがあります。
その場合の解決方法は以下のページを参照
AptanaでHTMLファイル内のshift_jisやEUC-JPコードを表示できません。
JavaをインストールするとC:\Program Files\Java\jre\lib\にcharsets.jarができるので これをC:\Program Files\Aptana\Aptana Studio\jre\libに入れればOK。
※便宜上そのまま引用させて頂だきました。パスは各自の環境により異なります。
4. PHP Development Environment 1.0 プラグインの追加
Aptana Studio 1.2.1 では GUI でインストールできます。インストール後に必ず起動される My Aptana の Plugins から GUI で簡単にインストールできます。
以上で最低限の開発環境が整います。
ImageMagick でサムネイル化すると IE7 で表示されないバグについて
ImageMagick を使用してアップロード写真のサムネイルを生成すると、Internet Explorer(以下 IE )でサムネイルが表示されない、という現象が起きます。
※表示されない=画像リンク切れ同様の×マークが表示されます。
不思議なことに Firefox では全く問題なく閲覧可能です。また、IEでも一部のサムネイル画像にだけ上記の現象が起きて、多くの場合は正しく表示されます。
ImageMagick では IE で表示できなくなる画像でも、GD を使用してサムネイル化すると正常に表示できます。
IE のバグなのか、ImageMagick のバグなのか???
バグの原因そのものが特定できず、苦労したのでメモしておきます。
なお、以下のページでも現象の報告はされていますが、原因究明がなされていないので参考になりませんでした。
-
-
-
-
-
-
- -
-
-
-
-
-
・OpenPNEの画像縮小にImageMagickを用いているのですが、一部のgif画像が表示されないという現象が起きました
・#591 (IE7で表示されない画像がある) - OpenPNE - Trac
-
-
-
-
-
- -
-
-
-
-
※ 以下は理論的に究明したわけではなく、試行錯誤の結果なので間違っているかもしれません。
【原因】
まず結論から。
これが上記の現象の原因です。色空間が RGB の画像は表示できるのですが、IEでは CMYK の画像は表示できないそうです。色の専門家ではない上に、ImageMagick のバグなのか、IEのバグなのかも見当がつけられなかったので、この原因を突き止めるのに相当苦労しました。
【確認方法】
[前提]
Imagick の基本的な使い方は本題からずれるので省略します。ここでは説明のためサムネイル作成手順を以下のように簡略化します。
(imagick オブジェクトの基本的なメソッドの説明もPHPマニュアルを見れば解決するので省略)
<?php $imagick = new Imagick(LOAD_FILE_NAME); $imagick->thumbnailimage(400, 300); $imagick->writeImage(SAVE_FILE_NAME); ?>
表示に成功する画像と失敗する画像の確認方法は以下です。
<?php $imagick = new Imagick(LOAD_FILE_NAME); var_dump($imagick->getImageColorspace());// CMYK の場合 int(12) , RGB の場合int(1) exit; ?>
ほとんどの画像ファイルは int(1) つまり 色空間が RGB なのですが、まれに int(12) つまり CMYK のものがあります。この CMYK が IE でのみ表示できない失敗画像です。
-
-
- -
-
※基本的なことなので省略しましたが、なぜ RGB が 1 で CMYK が 12 なのかわからない方は ImageMagick の定義済み定数( imagick::COLORSPACE_RGB と imagick::COLORSPACE_CMYK )を参照してください。
http://jp.php.net/manual/ja/imagick.constants.php
-
-
- -
-
以上が原因確認方法となります。
【解決方法】
imagick::setImageColorspace で色空間を(強制的に) RGB に設定します。(後述しますがうまくいきません!!)
<?php // うまくいきません!! $imagick = new Imagick(LOAD_FILE_NAME); $imagick->setImageColorspace(1);// RGB に設定 $imagick->thumbnailimage(400, 300); $imagick->writeImage(SAVE_FILE_NAME); ?>
一応、IE でも表示されるサムネイルができるのですが、色空間を変更すると画像が異常に汚くなります。実際に手を動かして確認頂けると明らかですが、サービスとして使えるレベルではありません。
RGB から CMYK への変換は Adobe系のソフトではスムーズらしいですが(未確認)、ImageMagick では難しいようです。
CMYK の画像は ImageMagick をあきらめて、(一般的に画質は良くないですが) GD にするしかなさそうです。
※ GD を使うと CMYK の画像もスムーズに RGB に変換されます。なお、GD の場合には色空間の設定/変換処理は内部的に実行されるため、PHP側での処理は特に必要ありません。
<?php $imagick = new Imagick(LOAD_FILE_NAME); $colorSpace = $imagick->getImageColorspace(); if ($colorSpace == 1) { $imagick->thumbnailimage(400, 300); $imagick->writeImage(SAVE_FILE_NAME); } else { // GD // 省略 } ?>
以上です。
-
- -
1行PR
形態要素解析の比較 MeCab / Yahoo!API
MeCab と Yahoo!日本語形態素解析API の解析結果の特徴を調べてみました。MeCab, Yahoo!APIともに「名詞」に限定して出現頻度を調べました。
-
- -
※ MeCab についてはmecab + PHP で形態素解析(出現頻度)の方法を参照
※ Yahoo!日本語形態素解析APIの使い方についてはドキュメントを参照。(基本的なAPIなので省略)
-
- -
1.ドラゴンボール
七つ集めれば、どんな願いでも一つだけ叶えてくれる「神龍(シェンロン)」を呼び出すことができる、ドラゴンボール。それに関わる様々な冒険物語で、人里はなれた山奥に住む尻尾の生えた少年・孫悟空がドラゴンボールを求めて西の都から来た少女・ブルマと出会うところから物語は始まる。 やがて最初のドラゴンボール探しの途中で知り合った亀仙人の下で修行し、天下一武道会やレッドリボン軍、ピッコロ大魔王等との闘いを通じてたくましく成長した悟空は、兄ラディッツにより、自分が惑星ベジータ出身の戦闘民族サイヤ人であることを知らされる。その後サイヤ人の王子ベジータと死闘を繰り広げ、永遠のライバルとなる。さらにサイヤ人をも支配する宇宙の帝王フリーザとナメック星で激突、伝説の超サイヤ人に目覚める。 地球帰還後、未来から来た少年トランクスから、かつて悟空が少年時代に壊滅させたレッドリボン軍の生き残りであるドクター・ゲロの存在、彼が作り上げた2体の最強の人造人間が3年後に現れること、その脅威、そして悲惨な未来を知らされる。悟空を始めとする戦士達はそれらを未然に防ぐのではなく、戦うことを選択。しかし事態は未来のトランクスが知っている歴史とは大きく違うものとなり、トランクスさえ知らなかった人造人間達、さらにはドクター・ゲロのコンピューターが作り上げた生命体セルが登場。悟空はこの戦いで命を落とす。 その後主人公は成長した息子孫悟飯に変わる。悟飯は平和な学園生活の最中、宇宙最強最悪の生命体魔人ブウとの宇宙存亡をかけた戦いに巻き込まれていく。
【結果】
MeCab | Yahoo!API | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
東京都は、日本の首都として、司法・立法・行政の中心地であり、経済の中心地でもある。日本の都道府県の中では人口が最も多く、人口密度は大阪府と同程度である。東京都区部を中心とする東京大都市圏は、世界で最も人口が多い都市圏であり、経済規模ではニューヨーク大都市圏を凌ぎ世界最大である[1]。またニューヨーク、ロンドン、パリと共に世界最上位レベルの世界都市にあげられることもある[2]。 明治維新以前の東京市の旧称は江戸であり、戦国時代には太田道灌の城下町、江戸時代には江戸幕府の所在地・徳川将軍家の城下町として栄えた。第二次世界大戦中の1943年7月1日に、東京都制(昭和18年法律第89号)が施行され 、東京府と東京市を統合した形で東京都が設置された。第二次大戦後の1947年(昭和22年)に、地方自治法が施行されたために東京都制は廃止されたが、東京都の名称と行政区域は変更されず、現在に至っている。このため東京都庁は、市役所(23区を包括する市)としての機能と県庁として広域行政体としての機能を併せ持つ。 東京都庁舎は長年千代田区の有楽町にあったが、1991年(平成3年)4月1日に新宿区の新宿副都心に移転した。移転に伴い、地方自治法に従って都条例も改正され、現在の都庁所在地は新宿区となっている[3]。ただし、地図上での都庁所在地の表記は、便宜上「東京」が使用され続けている[4]。なお、東京都の英語表記は、Tokyo Metropolis(あるいは Tokyo Metropolitan prefecture)である。東京都庁を指して東京都ということもあるが、この場合はTokyo Metropolitan Governmentとなる。
【結果】
MeCab | Yahoo!API | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
mecab + PHP で形態素解析(出現頻度)
mecab + PHP で形態素解析をやってみたときのメモです。Yahoo!さんの日本語形態素解析API や mecab PHP 用の拡張モジュールもありますが、windows vista PC にインストールした mecab を直接使用し、その結果をPHPでパースして出現頻度を算出する、ということをやってみました。
-
- -
※もしかしてはまった人も??
手元の Windows Vista PC では、mecab を 「C:\Program Files」フォルダ以下にインストールしたところ、mecab を実行できませんでした。「C:\myapp\mecab」のようにスペースを含まないフォルダにインストールしたら実行できました。
-
- -
参考にしたのは以下の人力検索。
PHPについて質問致します。 形態素解析を行うにあたっていくつかの形態素解析エンジンを比較していった結果、 MeCab(http://mecab.sourceforge.jp/)を使用することに致しま.. - 人力検索はてな
(どうでもいいですけどTITLEが長する・・・)
<?php $mecabpath = 'C:\..省略..\MeCab\bin\mecab.exe' ; // mecab.exe のパス $inputfile = 'C:\..省略..\test.txt' ;// 解析対象の文書ファイル exec("$mecabpath $inputfile", $result); $word_list_index = $word_list = array(); foreach ($result as $val) { $tmp = explode(",", $val); $tmp = explode("\t", $tmp[0]);// $tmp[0]: 要素, $tmp[1]: 品詞 if ($tmp[1] == '名詞') { $key = array_search($tmp[0], $word_list_index); if ($key === false) {// 新出 $word_list[] = array('num' => 1, 'word' => $tmp[0]); $word_list_index[] = $tmp[0]; } else {// 既出 $word_list[$key]['num'] = $word_list[$key]['num'] + 1; } } } unset($word_list_index); arsort($word_list); echo '<table border="1" cellpadding="5">'; foreach ($word_list as $val) { echo "<tr><td>{$val['num']}</td><td>{$val['word']}</td></tr>\n"; } echo "</table>"; ?>
以下の文書ファイル(wikipedia の PHP)を上記スクリプトで解析してみました。
PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。 PHPは、HTML埋め込み型のサーバサイド・スクリプト言語として分類される。この言語処理系自体は、C言語で記述されている。 ウェブサーバ上で動作し、ウェブサーバ上の文書が要求されるたびに、この文書に記述されたPHPのプログラムを実行し、その結果をウェブブラウザに対して送信する。 ウェブブラウザに送信されるデータは通常のHTMLであり、PHPのプログラムを含まない。この点でHTML埋め込み型のクライアントサイド・スクリプト言語(JavaScriptなど)と本質的に異なっている。 平易な文法のため初心者でも習得しやすく、また大規模な開発にも多く用いられている。多くのフレームワークやライブラリが存在し、開発の手助けとなっている。 数多くのオープンソースウェブアプリケーションに利用されている一方、しばしば脆弱性の報告がなされ、過去に深刻なセキュリティホールが何度か報告されている。
6 | 言語 |
4 | PHP |
4 | HTML |
2 | 報告 |
2 | 文書 |
2 | 動的 |
2 | 送信 |
2 | 上 |
2 | 処理 |
2 | 系 |
2 | 型 |
2 | 記述 |
2 | 開発 |
2 | プログラム |
2 | データ |
2 | ウェブブラウザ |
2 | ウェブサーバ |
2 | こと |
1 | 利用 |
1 | 要求 |
1 | 目的 |
1 | 本質 |
1 | 平易 |
1 | 文法 |
1 | 分類 |
1 | 動作 |
1 | 度 |
1 | 点 |
1 | 的 |
1 | 通常 |
1 | 多く |
1 | 存在 |
1 | 脆弱 |
1 | 生成 |
1 | 性 |
1 | 深刻 |
1 | 初心者 |
1 | 習得 |
1 | 手助け |
1 | 主 |
1 | 実行 |
1 | 実現 |
1 | 自体 |
1 | 結果 |
1 | 規模 |
1 | 過去 |
1 | 何 |
1 | 一方 |
1 | ワーク |
1 | ライブラリ |
1 | ホール |
1 | プログラミング |
1 | プリプロセッサー |
1 | フレーム |
1 | ピー・エイチ・ピー |
1 | ハイパーテキスト |
1 | セキュリティ |
1 | スクリプト |
1 | サイド |
1 | サーバ |
1 | クライアントサイド・スクリプト |
1 | オープンソースウェブアプリケーション |
1 | ウェブページ |
1 | ため |
1 | たび |
1 | Preprocessor |
1 | JavaScript |
1 | Hypertext |
1 | C |
1 | : |
EZサーバのIPアドレス変更
12月11日に ez web (au) サーバーのIPアドレスが変更されたようです。
【関連リンク】
携帯端末以外のIPを制限するhtaccessを簡単生成 『Mobile IP htaccess Maker』 - HTMLタグボード