Posts tagged ec

12月に読んだ本

0

先月、宣言(11月に読んだ本 )したように少し小説を読みました。
2冊のみですが、どちらも文庫本で700ページ前後なので読み応えはありました。「幻夜」は「白夜行 」の続編のようで白夜行に迫る面白さで読むのが止まりませんでした。

最悪」は奥田英郎の最初の頃の作品なので、イラブ先生シリーズやサウスバウンドなどにはかないませんが、引き込まれる作品でした。

幻夜

幻夜

最悪 (講談社文庫)

最悪 (講談社文庫)

あなたが年収1000万円稼げない理由。―給料氷河期を勝ち残るキャリア・デザイン (幻冬舎新書 た 3-1)

あなたが年収1000万円稼げない理由。―給料氷河期を勝ち残るキャリア・デザイン (幻冬舎新書 た 3-1)

【超】WORK HACKS!

【超】WORK HACKS!

起業家2.0―次世代ベンチャー9組の物語

起業家2.0―次世代ベンチャー9組の物語

効率が10倍アップする新・知的生産術―自分をグーグル化する方法

効率が10倍アップする新・知的生産術―自分をグーグル化する方法
勝間さんの本はどれもはずれがなくていいですね。読んでいるだけでやる気が出てきます。(それだけで実践しないと意味ないですが)巻末のお勧め本がかなりいいです。これからの読書の参考にしていきます。早速、今月は「非常識な成功法則―お金と自由をもたらす8つの習慣」をリストを参考に読んでみました。

読みならがメモしたことをいくつかリストアップしておきます。

  • 情報こそが現代の通貨である
  • 資本主義の本質は賢くない人から賢い人へお金が移動する仕組み
  • 情報の発信者になれば情報がラクに収集できるようになる
  • 自分が得意なことに集中する
  • Not To Do List を作成する
  • まずは見返りを求めずに情報を発信し続ける

金融商品にだまされるな!

金融商品にだまされるな!

金持ちの床屋さん

金持ちの床屋さん

非常識な成功法則―お金と自由をもたらす8つの習慣

非常識な成功法則―お金と自由をもたらす8つの習慣

レバレッジ人脈術

レバレッジ人脈術

チーズはどこへ消えた?

チーズはどこへ消えた?

ザ・マインドマップ

ザ・マインドマップ

WEB+DB PRESS Vol.42

WEB+DB PRESS Vol.42

人を出し抜く速読術―要領よく生きてるヤツは知っている (凄ビジ・シリーズ 3)

人を出し抜く速読術―要領よく生きてるヤツは知っている (凄ビジ・シリーズ 3)

キラー・リーディング 「仕事脳」が劇的に回り出す最強の読書法 (JBシリーズ)

キラー・リーディング  「仕事脳」が劇的に回り出す最強の読書法 (JBシリーズ)

.htaccess で error_reporting を設定するときの注意点

5

.htaccess で PHP が出力するエラー表示を制御するには E_ALL などの定数は使えないので、ビット値で指定する必要があります。

E_ALL & ~E_NOTICE を設定する場合
php.ini
error_reporting = E_ALL & ~E_NOTICE

php コード内
error_reporting(E_ALL ^ E_NOTICE);

.htaccess
php_value error_reporting 6135

error_reporting に設定する値は PHP: error_reporting – Manual を参照するといいでしょう。

定数
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR

ちなみに E_ALL & ~E_NOTICE の値が 6135 になる理由は E_ALL の値が 6143、E_NOTICE の値が 8 なので 6143-8=6135 になります。(または E_NOTICE と E_STRICT 以外の値を足した数が 6135 になります。

私は開発中は E_NOTICE も表示するようにしていますが、結構表示させない人が多いようで人のコードを修正するときなど Notice エラーが出て困ることがあります。E_NOTICE を表示するようにしておくと未定義の変数などバグの元になりやすいものを教えてくれるのでお勧めです。

また、開発終了して本番運用するときにはブラウザにエラーを出力しないように
error_reporting(0);
を設定しておくことを忘れずに!
その際も PHP のエラーはエラーログに記録されるようにしておかないのも忘れずに。

CakePHP JQuery ヘルパー

3

JQuery helper for CakePHP ( PQuery port ) at NGCoders
CakePHP から JQuery を簡単に使うことができます。

正確には PQuery ヘルパーかもしれません。PQuery は JQuery を PHP から簡単に使用するライブラリで PQuery ヘルパーと同じ開発者が開発しています。
参考:PQuery – PHP and JQuery at NGCoders

インストール

JQuery helper for CakePHP ( PQuery port ) at NGCoders から JQuery ヘルパーをダウンロードし、解凍した pquery.php を /app/views/helpers にコピーします。
そのほかに jquery.js ファイルも必要になります。こちらもダウンロードして /app/webroot/js にコピーします。

コントローラ

Pquery ヘルパーと Javascritp ヘルパーを使用します
var $helpers = array('Pquery', 'Javascript');

ビュー

jquery.js の読み込み
<?php echo $javascript->link('jquery.js'); ?>

使用例

トグルボタン

<div id='msg'>Message...</div>
<?php echo $pquery->link_to_function('toggle', $pquery->toggle('#msg'));?>

フォームで送信された内容により HTML を更新
入力したテキストを /controller/action/ に GET で送信し、id=idtoupdate に受け取った HTML を表示する

<?php echo $pquery->form_remote_tag(array('url'=>'/controller/action/','update'=>'#idtoupdate'));?>
<input type='text' name='field' />
<input type='submit' />

<div id='idtoupdate'></div>

pquery.php を見ると色々なメソッドがあります。使い方はソースを見ればすぐに分かると思います。

Smarty で正規表現を if 文で使用する

2

Smarty には正規表現を使用して文字列を置換する regex_replace があります。
これを上手に使用して if 文で正規表現を用いて条件分岐させます。

if (preg_match('/php/i', 'PHP is the web scripting language of choice.')) {
    echo 'A match was found.';
} else {
    echo 'A match was not found.';
}

PHP で上記のような処理を Smarty で書くと下記のようになります。

{assign var='string' value='PHP is the web scripting language of choice.'}
{if $string|regex_replace:'/.*php.*/i':'php' eq 'php'}
A match was found.
{else}
A match was not found.
{/if}

ポイントは regex_replace を用いて、正規表現のパターンに該当する場合は元の文字列を何かしらの文字列(上の例でいうと’php’)に置換してしまい、それを eq で置換されているか判定するということです。

これを実際に使用したのは OpenPNE のテンプレートです。
OpenPNE を使用していて、特定のカテゴリのときのみ読み込む CSS を変えたいときがありました。
OpnePNE のイベント関連の URL は http://expamle.com/?m=pc&a=page_c_event_*** という感じになります。
全部で14種類ありますので、これを普通に if 文で書いていると大変なことになりますし、追加などがあったときのことを考えるとよくありません。

そこで Smarty の if 文に正規表現を使用して下記のようにすることにより1つの条件で page_c_event_*** の URL を条件分岐させました。

Smarty テンプレート

{if $smarty.get.a|regex_replace:"/page_c_event.*_/":"event" eq "event"}
{** イベントです**}
{else}
{** イベント以外です **}
{/if}

WordPress の サイドバーの最近の投稿(Recent Entry)にはてブ数を表示する

0

このブログでいうと右カラムにある「Recent Entry」の各エントリの横にはてブ数を表示してみました。
これは WordPress のソースを少しいじる必要があります。

wp-includes/widgets.php
698行目あたりにある
<li><a href="<?php the_permalink() ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?> </a></li>

という行を
<li><a href="<?php the_permalink() ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?> </a> <a href="http://b.hatena.ne.jp/entry/<?php the_permalink(); ?>"><img src="http://b.hatena.ne.jp/entry/image/<?php the_permalink(); ?>" alt="" /></a></li>

に変更します。
変更したファイルをアップロードするのをお忘れなく!

試した WordPress のバージョンは ME2.2.1 にです。

HTTP_Request を使用してファイルをアップロードする方法

1

PEAR の HTTP_Request を使用してファイルをアップロードする方法です。

<form action='POST_URL' method='post' enctype='multipart/form-data'>
<input type='text' name='title'>
<textarea name='body'></textarea>
<input type='file' name='upload_file'>
<input type='submit'>
</form>

上記のような HTML でファイルをアップロードする場合と同じような処理をするには、下記のように HTTP_Request を使用します。

// POST パラメータ
$post_data = array(
    'title' => $title,
    'body'  => $body,
);
// アップロードパラメータ
$upload_file = array(
    'name' => 'file',
    'path' => '/path/to/file',
);
// アップロード
$rs = http_send(POST_URL, $post_data, $upload_file);

function http_send($url, $params, $upload_file=null) {
    $req = new HTTP_Request();
    $req->setMethod(HTTP_REQUEST_METHOD_POST);

    foreach ($params as $key => $val) {
        $req->addPostData($key, $val);
    }

    $req->setURL($url);
    if ($upload_file) {
        $res = $req->addFile($upload_file["name"], $upload_file["path"]);
        if (PEAR::isError($res)) {
            echo $res->getMessage();
            exit;
        }
    }

    if (!PEAR::isError($req->sendRequest())) {
        return $req->getResponseBody();
    } else {
    	return false;
    }
}

参考:PEAR :: Manual :: ファイルアップロード

phpPgAdmin でログインできない

0

普段は MySQL ばかり使用しているのですが、PostgreSQL を使用する必要があり、phpPgAdmin を使うことにした。
開発用のサーバには phpPgAdmin がインストールされているが、ブラウザで閲覧できるようにはまだしていなかった。

Open Tech Press | phpPgAdmin:Web開発者向けのPostgresクライアントツール を参考に /usr/share/phpPgAdmin にインストールされている phpPgAdmin をブラウザでアクセス可能にした。

/etc/http/conf/httpd.conf に下記を追加

Alias /phppgadmin /usr/share/phppgadmin/
<DirectoryMatch /usr/share/phppgadmin/>
  Options +FollowSymLinks
  AllowOverride None
  order deny,allow
  deny from all
  allow from localhost
</DirectoryMatch>

これでブラウザから http://example.com/phpPgAdmin/ でアクセスできるようになった。
しかし、PostgreSQL のユーザでログインしようとするとエラーになる。

これは シン石丸の電脳芸事ニッキ: debian 3.1へのphppgadminのインストール後の設定 を参考にして解決。

/etc/postgresql/pg_hba.conf に下記を追加
host all all 127.0.0.1 255.255.255.255 trust

これで無事 phpPgAdmin にログインできました。

CakePHP Security コンポーネントのまとめ

1

CakePHP の Security コンポーネント の動作を調べたのでまとめておきます。
この Security コンポーネントをうまく使用すればクロスサイトリクエストフォージェリ(CSRF) を防ぐことができるでしょう。

トークンの使用

フォームにワンタイムトークンを実装する方法です。

コントローラの beforeFilter メソッドでトークンをチェックするアクションを指定
function beforeFilter() {
    $this->Security->requireAuth('login');
}
ビューのフォーム内にトークンを設定

<?php echo $html->formTag(); ?>
トークンが hidden 属性で生成される

トークンが一致しない場合

requireAuth で指定したアクションに POST でアクセスがあるとセションに保存したトークンとフォームから送られてきたトークンが一致するかチェックします。またそのほかにトークンの有効期間もチェックします。有効期間は CAKE_SECURITY の設定により違います。

CAKE_SECURITY 有効期間
high 10分
medium 100分
low 300分

トークンが一致しないと SecurityComponent の blackHole メソッドが実行されます。このメソッドでは
header('HTTP/1.0 404 Not Found');
を出力して exit します。(画面は空白)

任意の処理を実行したい場合は blackHoleCallback でコールバック関数を指定します。
設定できるのは同じコントローラ内のアクションのみになります。

function beforeFilter() {
    $this->Security->blackHoleCallback = "securityError";
    $this->Security->requireAuth('login');
}

function securityError() {
	die("security error!");
}
トークンチェックをするアクションを複数指定するときはカンマでつなげる

$this->requireAuth('login', 'delete');

特定のコントローラからのポストのみ許可する

$this->Security->allowedControllers = array("users");
これを指定するとたとえトークンが一致しても許可のないコントローラからのポストの場合は blackHole メソッドを実行します。

特定のアクションからのポストのみ許可する

$this->Security->allowedActions = array("action");
これを指定するとトークンが一致しても許可のないアクションからのポストの場合は blackHole メソッドを実行します。

ポストのみ受け付けるようにする

$this->requirePost('login');
これはトークンとは違い、POST のみ許可して GET でのアクセスを不可にします。
/users/login/ のような URL でのアクセスも GET なので不可になります。
POST の処理だけを実行したいようなアクションに使用します。

CakePHP Textヘルパーの truncate を全角文字に対応させてみた

5

CakePHP の Text ヘルパーに truncate という指定された文字列を任意の長さに省略するメソッドがあります。
しかし、このメソッドは全角文字を考慮していないため全角文字に用いると文字化けすることがあります。
そこでこのメソッドを全角文字に対応させてみました。

function truncate($text, $length, $ending = '…', $exact = true) {
    if (strlen($text) < = $length) {
        return $text;
    } else {
        mb_internal_encoding("UTF-8");
        if (mb_strlen($text) > $length) {
            $length -= mb_strlen($ending);
            if (!$exact) {
            $text = preg_replace('/\s+?(\S+)?$/', '', mb_substr($text, 0, $length+1));
            }
            return mb_substr($text, 0, $length).$ending;
        } else {
            return $text;
        }
    }
}

直接 Text ヘルパーを修正するとバージョンアップなどのときに困るので、
cake/libs/view/helpers/text.php を app/views/helpers/mb_text.php にコピーしクラス名を
class MbTextHelper extends Helper{
として、truncate メソッドを上記のように修正しました。

使用するときはコントローラ内で、
var $helpers = array("MbText");
view で
echo $mbText->truncate("あいうえおかきくけこ", 5, "…", true);
とすると
あいうえ…
と表示されます。

11月に読んだ本

2

最近は仕事関係の本や自己啓発関係の本が多い。特に今年は小説を読んでないので、今月は少し小説を読もうと思っています。

決算書がスラスラわかる 財務3表一体理解法 (朝日新書 44) (朝日新書 44)

決算書がスラスラわかる 財務3表一体理解法 (朝日新書 44) (朝日新書 44)

あたりまえだけどなかなかできない仕事のルール (アスカビジネス)

あたりまえだけどなかなかできない仕事のルール (アスカビジネス)

ウェブ時代をゆく ─いかに働き、いかに学ぶか (ちくま新書 687)

ウェブ時代をゆく ─いかに働き、いかに学ぶか (ちくま新書 687)

なぜ、エグゼクティブはゴルフをするのか?

なぜ、エグゼクティブはゴルフをするのか?

ちょいデキ! (文春新書 591)

ちょいデキ! (文春新書 591)

すごい「実行力」

すごい「実行力」

なぜ、エグゼクティブはゴルフをするのか?

なぜ、エグゼクティブはゴルフをするのか?

仕事に活かす!本200%活用ブック

仕事に活かす!本200%活用ブック

WEB+DB PRESS Vol.41

WEB+DB PRESS Vol.41

お金は銀行に預けるな 金融リテラシーの基本と実践 (光文社新書)

お金は銀行に預けるな   金融リテラシーの基本と実践 (光文社新書)

プログラミングPHP 第2版

プログラミングPHP 第2版

CakePHPガイドブック

CakePHPガイドブック

忙しいパパのための子育てハッピーアドバイス

忙しいパパのための子育てハッピーアドバイス

ケータイ業界52人が語る「戦略」の裏側

ケータイ業界52人が語る「戦略」の裏側

カリスマ・コンサルタントの稼ぐ超思考法 ~仕事と人生に効く「問題解決力」が身につく20の方法~

カリスマ・コンサルタントの稼ぐ超思考法 ~仕事と人生に効く「問題解決力」が身につく20の方法~

自転車生活の愉しみ

自転車生活の愉しみ

Go to Top