Posts tagged age

ルパンタイトル風待受けジェネレータ

1

swftools の勉強がてら、ルパンタイトルの待受けFlash ジェネレータを作りました。

FlashLite で文字を自由に入力させて何か作ろうとするとフォントとフォントサイズで自由度が低くなるんですよね。
そこで、一文字づつ画像を PHP で作成して、swftools の jpeg2swf を使用して Flash に変換するようにしました。
(続きを読む…)

WordPress テーマを作成する(6) CSS でデザインを整える

1

前回まではまだ縦に長いだけのデザインされていない状態でした。今回は CSS を作成してデザインを整えてブログらしくして行こうと思います。 (続きを読む…)

WordPress テーマを作成する(2)

1

前回は style.css と index.php だけを作成して最低限のブログを表示させました。なぜこれだけのファイルで表示ができるかというと選択しているテーマに必要なファイルがない場合は wp-content/thmems/default 内のファイルを使用するためです。

今回はヘッダファイルとフッタファイルを作成します。

ヘッダファイル

テーマディレクトリに header.php を作成し下記のような内容にしました。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>

<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

<title><?php bloginfo('name'); ?> <?php wp_title(); ?></title>

<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- leave this for stats -->

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
<link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>" />
<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

<?php wp_head(); ?>
</head>
<body>
<div id="page">
<div id="header">
<h1><a href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1>
<div class="description"><?php bloginfo('description'); ?></div>
</div>

ゼロから書くのは大変なので default/header.php をコピーして必要最低限のみ残してみました。

フッタファイルの作成

ヘッダ同様に footer.php ファイルを作成し、下記のようにしました。

<div id="footer">
<?php bloginfo('name'); ?> Powered by <a href="http://wordpress.org/">WordPress</a><br />
<a href="<?php bloginfo('rss2_url'); ?>">Entries (RSS)</a>
and <a href="<?php bloginfo('comments_rss2_url'); ?>">Comments (RSS)</a>.
</div>
</div>

<?php wp_footer(); ?>
</body>
</html>

ヘッダとフッタのみのブログができました

(クリックで拡大画像が見れます)
wp2.png

yetibot@naver.com対策

1

最近サーバが少し重かったので調べてみると

Yeti/0.01 (nhn/1noon, yetibot@naver.com, check robots.txt daily and follow it)

という UserAgent が激しくアクセスしていました。このボットはあまり行儀のよいボットではないようですのでブロックすることにしました。

httpt.conf

<Directory />
    SetEnvIf User-Agent Yeti badrobot
    Order Allow,Deny
    Allow from all
    Deny from env=badrobot
</Directory>

ただ、よく UserAgent を変更するボットのようですが、これでしばらく様子みることにします。

朝4時に起床する習慣

3

Amazon ではずうと在庫切れで変えなかったのですが、昨日秋葉原のヨドバシの上にある有隣堂に行ったら1冊だけ置いてあったので早速購入して読みました。

朝9時までの「超」仕事術

朝9時までの「超」仕事術
見田村 元宣
¥ 1,575
単行本
インデックス・コミュニケーションズ

著者のブログ:朝4時起きの税理士 見田村元宣のビジネス成功宣言!!

著者のブログに書いてありましが現在2刷りでもうすぐ3刷りも決定したそうです。もうすぐアマゾンへも入荷するそうです。

私も朝4時に起きるようになって丸2年たち3年目に突入しました。今年は正月も4時起きでした。先月風邪を引き2日ほど7時に起きたほかは今のところ4時起き、たまに3時に目が覚めて3時起きのときもあります。今では完全にリズムが出来上がり目覚ましなしで4時に自然と目が覚めます。

朝4時に起きるようになったきっかけは子供が産まれ自分の時間を夜に取るのが難しくなってきたためです。そのため朝少し早く起きて勉強の時間に当てようと考えてやってみました。それまでは2時、3時に寝ることが通常だったので劇的な変化でしたね。

朝早く起きるようになって、4時から7時までみっちり3時間自分の自由な時間が取れ、読書や勉強する時間にあてています。急ぎの仕事があるときはそれをやったりもしますが。

また早起きするようになったもうひとつの利点として、朝食を食べられるようになったことです。それまでは朝起きてから2時間くらいしないと食欲が出なかったのですが、今は起きた瞬間からお腹が減っているような状態です。

起きてからやることは、トイレ行って、洗顔して、コンタクト入れて、コーヒーの豆をひいてコーヒーを入れる、軽食を食べながらメールチェック、その後読者や勉強という流れですね。この軽食が結構楽しみで、早起きのモチベーションにもなります。今は冷凍のちまきを食べてます。他にはドーナツ、冷凍の焼きおにぎり、冷凍の肉まんなどですね。欠点は太ることですが。。。まあそこは適当に運動しましょう。

この本の著者は早起きの習慣は夏から始めることを薦めています。しかし著者は冬にはじめたそうです。私も実は1月に始めました。なのでようはやるかやらないかのやる気の問題なのかなと思います。

この本を読んで気になった言葉をメモしておきます。

これは著者の考えた言葉だそうです。

気持ちが違うから行動が違う、行動が違うから結果が違う

これは「はじめの一歩」の鴨川会長の言葉だそうです。マンガといえども侮れないですね。

努力したものが全て報われるとは限らん。しかし、成功した物は皆すべからく努力しておる。

1月に読んだ 「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ もオススメです。

「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ
「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ古市 幸雄
¥ 1,365
単行本
アスコム

2月に読んだ本

0

オススメは「成功本50冊「勝ち抜け」案内」です。成功本50冊を丹念に解説しています。こういう内容でぜひブログを書いて欲しいです。

あと野球の開幕が近いのもあるけど野球関連の本を2つ。
あぁ、阪神タイガース―負ける理由、勝つ理由 (角川oneテーマ21 A 77)
不動心 (新潮新書 201)
私は阪神ファンですが、松井のことは好きです。巨人は大嫌いですが、桑田や松井のように真摯に野球に取り組んでいる選手はやはり野球ファンとしては好きですね。阪神に入って欲しかった。この本を読んで松井の考え方などよく理解でき、また少し好きになりました。

野村監督の本は面白いのですが、微妙な心境です。敗軍の将は兵を語らずでいて欲しかった。どうしても自分の責任ではなく阪神というチームのせいでうまくいかなかったと言いたいのかもしれませんが、野村監督が名監督なのはこんな言い訳をしなくても分かっていることだと思います。

なにげに面白かったのは「字幕屋は銀幕の片隅で日本語が変だと叫ぶ」です。字幕の英語が変だという方にはぜひ一度読んで欲しいです。字幕屋さんの苦労がにじみ出てます。ここまで書いてこの後仕事に影響しないか心配です。

WEB+DB PRESS Vol.43


WEB+DB PRESS Vol.43

¥ 1,554
大型本
技術評論社

美容院と1000円カットでは、どちらが儲かるか?―できるビジネスパーソンになるための管理会計入門!


美容院と1000円カットでは、どちらが儲かるか?―できるビジネスパーソンになるための管理会計入門!
林 總
¥ 1,575
単行本
ダイヤモンド社

成功本50冊「勝ち抜け」案内 How to Improve Your Reading Skills for Success in Life (Kobunsha Paperbacks Business (013))


成功本50冊「勝ち抜け」案内 How to Improve Your Reading Skills for Success in Life (Kobunsha Paperbacks Business (013))
水野 俊哉
¥ 1,000
ペーパーバック
光文社

決算書の暗号を解け! ダメ株を見破る投資のルール


決算書の暗号を解け! ダメ株を見破る投資のルール
勝間和代
¥ 1,680
単行本(ソフトカバー)
ランダムハウス講談社

インテリジェンス 武器なき戦争 (幻冬舎新書)


インテリジェンス 武器なき戦争 (幻冬舎新書)
手嶋 龍一
¥ 777
新書
幻冬舎

FFmpegで作る動画共有サイト


FFmpegで作る動画共有サイト
月村 潤
¥ 2,940
単行本(ソフトカバー)
毎日コミュニケーションズ

「食い逃げされてもバイトは雇うな」なんて大間違い 禁じられた数字〈下〉 (光文社新書)


「食い逃げされてもバイトは雇うな」なんて大間違い   禁じられた数字〈下〉 (光文社新書)
山田 真哉
¥ 735
新書
光文社

世界一愚かなお金持ち、日本人


世界一愚かなお金持ち、日本人
マダム・ホー
¥ 1,050
新書
ディスカヴァー・トゥエンティワン

ぐんぐん実力がつく! 逆算式SQL教科書


ぐんぐん実力がつく! 逆算式SQL教科書
小野 哲
¥ 2,289
単行本(ソフトカバー)
技術評論社

ケータイでGoogle


ケータイでGoogle
佐野 正弘
¥ 1,344
単行本(ソフトカバー)
技術評論社

IKEAファンブック


IKEAファンブック
森井 ユカ
¥ 1,680
単行本
河出書房新社

右脳でわかる!株式投資力トレーニング


右脳でわかる!株式投資力トレーニング
窪田 真之
¥ 840
単行本
日本経済新聞出版社

あぁ、阪神タイガース―負ける理由、勝つ理由 (角川oneテーマ21 A 77)


あぁ、阪神タイガース―負ける理由、勝つ理由 (角川oneテーマ21 A 77)
野村 克也
¥ 720
新書
角川書店

不動心 (新潮新書 201)


不動心 (新潮新書 201)
松井 秀喜
¥ 714
新書
新潮社

字幕屋は銀幕の片隅で日本語が変だと叫ぶ (光文社新書)


字幕屋は銀幕の片隅で日本語が変だと叫ぶ (光文社新書)
太田 直子
¥ 735
新書
光文社

ウェブ国産力―日の丸ITが世界を制す (アスキー新書 047)


ウェブ国産力―日の丸ITが世界を制す (アスキー新書 047)
佐々木 俊尚
¥ 790
新書
アスキー

決断力 (角川oneテーマ21)


決断力 (角川oneテーマ21)
羽生 善治
¥ 720
新書
角川書店

できる人の英語勉強法


できる人の英語勉強法
安河内 哲也
¥ 1,365
単行本(ソフトカバー)
中経出版

個人事業・自由業者のための会社をつくるメリット・デメリット本当のところズバリ!


個人事業・自由業者のための会社をつくるメリット・デメリット本当のところズバリ!
井上 修
¥ 1,470
単行本
すばる舎

牛丼一杯の儲けは9円―「利益」と「仕入れ」の仁義なき経済学 (幻冬舎新書 さ 5-1)


牛丼一杯の儲けは9円―「利益」と「仕入れ」の仁義なき経済学 (幻冬舎新書 さ 5-1)
坂口 孝則
¥ 756
新書
幻冬舎

CakePHP1.2 のバリデーション

12

CakePHP 1.2 を使用してフォームを作成してバリデーションを使用したメモです。

下記サイトを参考にさせていただきました。
cakePHP 1.2のバリデーションを理解する – cakephp – クロアチアで働くプログラマー日記

例としてメールアドレスを2回入力させるフォームを考えて見ます。
バリデーションルールとして

  • 必須項目
  • メールアドレスとして正しい
  • メールアドレスがユニーク
  • 2回入力したメールアドレスが一致する

モデルにバリデーションを定義する

var $validate = array(
    'email' => array(
        'unique' => array(
    	    'rule' => array('checkUnique', 'email'),
    	    'message' => 'メールアドレスは既に登録されています'
    	),
        'rule1' => array(
       	    'rule' => array('email'),
       	    'message'=>'メールアドレスが正しくありません'
      	 ),
        'required' => array(
       	    'rule'=>VALID_NOT_EMPTY ,
       	    'message' => '必須項目です'
       	),
    ),
    'email_confirm' => array(
        'rule1' => array(
    	    'rule'=> array('checkCompare'),
    	    'message'=>'一致しません'
    	),
    ),
);

私はエラーメッセージをバリデーション定義にまとめておきたいので、上記のように各ルールに
'message' => 'エラーメッセージ'
として定義しています。
ここで定義しておけば、後でビューに書くフォームヘルパーでフォームを出力するときに引っかかったエラーを自動的に出力することができます。

また、自分でバリデーション関数を作成してチェックすることもできます。それが checkUnique と checkCompare です。

メールのユニークチェックは参考サイトを参考にさせていただきました。

function checkUnique($field){
    foreach( $field as $key => $value ){
        $this->recursive = -1;
        $found = $this->find(array("{$this->name}.$key" => $value));
        return !$found;
    }
}

次にメールアドレスを2回入れたものが一致するかのチェックです。
これはパスワードなどでもたまに使用するので汎用性を持たせてあります。
例えばメールアドレスのフィールド名が email の場合、確認用のフィールド名は ‘_confirm’を付けて email_confirm としておけばこの2つが一致するかチェックします。

function checkCompare($field) {
    foreach( $field as $key => $value ){
        if (preg_match('/^(.+)_confirm$/', $key, $regs)) {
            return $this->data[$this->name][$regs[1]] == $this->data[$this->name][$key];
        }
    }
}

ビューでフォームを設定

<?php echo $form->input('User/email', array('type'=>'text')); ?>
<?php echo $form->input('User/email_confirm', array('type'=>'text')); ?>

このように書いておけばバリデーションエラーがある場合は、モデルのバリデーションに定義したエラーメッセージを自動的に出力してくれます。

ちなみに上記のように書くと input タグの前に email などのフィールド名が出力されます。これを消したい場合は
<?php echo $form->input('User/email', array('type'=>'text', 'label'=>'')); ?>
と書くと表示されなくなります。

追記:
コメントで教えていただきました。label=>” だと表示されないが、label タグは残るので
<?php echo $form->input('User/email', array('type'=>'text', 'label'=>false)); ?>
とするとラベルタグも出力されなくなります。

コントローラでバリデーションチェック

以下のようになります。

function action() {
    if ($this->data) {
        if ($this->User->create($this->data) && $this->User->validates()) {
	    // バリデーションOK
	}
    }
}

他にもいろいろフォーム気がついた点があったのでそれはまた後でまとめます。

CakePHP Ajax のフォームを作成する

5

今さらなのですが CakePHP1.1 で Ajax のフォームを作成するというのをやったのでメモしておきます。

Ajax , Javascript ヘルパーを使用できるようにする

コントローラで Ajax, Javascritp ヘルパーを使用できるようにする。
var $helpers = array('Ajax', 'Javascript');

prototype.js を読み込む

webroot/js に prototype.js を配置し、ビューで読み込みます。
<?php echo $javascript->link('prototype'); ?>

ビューでフォームを作成する

今回は submit ボタンを押した後、更新中には submit ボタンを消して変わりに「更新中」というメッセージを表示し、更新終了後にメッセージをボタンの下の id=ajax_message に表示するようにしました。

<?php
$options = array(
    "update" => "ajax_message",
    "loading" => "Element.hide('ajax_button'); Element.show('ajax_loading');",
    "complete" => "Element.show('ajax_button'); Element.hide('ajax_loading');",
    );
echo $ajax->form("/controller/action/", "post", $options);
?>
<?php echo $html->input('Model/Field', array('type'=>'text')); ?><br>
<input type="submit" id="ajax_button">
<div id="ajax_loading" style="display:none;">更新中...</div>
<div id="ajax_message"></div>

$ajax->form の $options の
“update” で更新するメッセージ領域を指定し、
“loading”でアップロード中の動き、
“complete” で処理終了後の動き
を指定しています。

コントローラに Ajax で処理するアクションを作成

function action() {
    $this->layout = 'ajax';
    /* $this->data にフォームの内容が渡るので必要な処理を書く */
    $this->Model->id = $this->data['Model']['id'];
    $this->Model->saveField("Field", $this->data['Model']['Field'], true);
}

$this->layout で ‘ajax’ を指定して余計なヘッダ、フッタが出ないようにします。

Ajax で出力するビューを作成する

上のコントローラのアクションで出力するビューを作成します。
上の例では saveField でフォームから送られてきたデータを使用して更新処理しています。その結果によってメッセージを送信します。

<?php
if($msg=$error->messageFor('Model/Field')) {
    echo $msg;
} else {
    echo "更新しました";
}
?>

CakePHP jQuery を使用した Ajax ファイルアップロード

6

下記ページを参考にさせていただきました。
“jQueryを使ったAjaxファイルアップロード” フォーラム – CakePHP Users in Japan
David Golding Design Blog -

上記ページでは jQuery を使用してテキストファイルをアップロードしてテキストの内容を表示するというものですが、画像をアップロードしてアップロードした画像をフォームの下に Ajax を利用して表示するというのをやってみました。

jQuery 使用準備

jquery.js と jquery.form.js を app/webroot/js/ 以下に配置します。
アップロードするビューで上記 JavaScript ファイルを読み込むため下記コードをビューに追加します。
<?php echo $javascript->link(array('jquery.js','jquery.form.js')); ?>

ビューにアップロードするフォームを作成する

今回は users コントローラの form アクションでフォームを表示します。Ajax の処理を行うのは users コントローラの upload アクションです。
views/users/form.ctp

<h1>upload test</h1>
<?php echo $form->create('User',array('name'=>'uploadForm','id'=>'uploadForm','type'=>'file'));?>
<?php echo $form->input('upload_file',array('label'=>'Upload Text File ','type'=>'file'));?>
<?php echo $form->button('アップロード',array('onClick'=>'$('#uploadForm').ajaxSubmit({target: '#uploadFile',url: '/users/upload'}); return false;'));?>
</form>
<div id="uploadFile"></div>

コントローラの処理

views/users/form.ctp から「アップロード」ボタンを押すと users/upload アクションの $this->data にアップロードファイルの情報が入ってきます。ここでは mime タイプによって JPEG ファイルのみをアップロードできるようにしています。アップロード後に views/users/upload.ctp を出力します。

function upload() {
    if (!$this->data['User']['upload_file']) {
        $this->set('error','アップロードするファイルを選択してください');
	$this->render('upload','ajax');
    } else {
	if ($this->data['User']['upload_file']['type'] != 'image/jpeg') {
	    $this->set('error','アップロードできる画像は JPEG のみです');
	    $this->render('upload','ajax');
	} else {
	    $filename = '/files/'.intval(rand()).'.jpg';
	    rename($this->data['User']['upload_file']['tmp_name'], WWW_ROOT.$filename);
	    $this->set('filename', $filename);
	    $this->render('upload','ajax');
	}
    }
}

Ajax が返すビューを作成する

/users/upload で処理した結果を返すビューを作成します。今回は veiws/users/upload.ctp として作成しました。ここで img タグによりアップロードしたファイルを表示しています。

<?php if (!empty($error)): ?>
<p><?php echo $error;?></p>
<?php else: ?>
<p>Upload successful</p>
<?php echo $html->image($filename); ?>
<?php endif; ?>

以上で jQuery を使用して Ajax で画像のアップロードができます。

1月に読んだ本

1

オススメは「本は10冊同時に読め!」。ここまで言い切れるのはすごいなと思いました。あと「人を動かす」はやはり定期的に読み返したい感じです。

CakePHP 好きには「Fast CakePHP」もオススメです。解説が分かりやすいです。

ドラマ化が決定したという「夢をかなえるゾウ」も面白いです。課題まだ全部やってません。。。

本は10冊同時に読め!―生き方に差がつく「超並列」読書術 本を読まない人はサルである! (知的生きかた文庫 な 36-1)

本は10冊同時に読め!―生き方に差がつく「超並列」読書術 本を読まない人はサルである! (知的生きかた文庫 な 36-1)

ウェブを変える10の破壊的トレンド

ウェブを変える10の破壊的トレンド

人を動かす 新装版

人を動かす 新装版

Fast CakePHP (LLフレームワークBOOKS # 4)

Fast CakePHP (LLフレームワークBOOKS # 4)

夢をかなえるゾウ

夢をかなえるゾウ

Keitai Hacks[ケータイハック] ケータイをビジネスに活かす89の方法

Keitai Hacks[ケータイハック] ケータイをビジネスに活かす89の方法

ケータイ「メモ撮り」発想法 (光文社新書)

ケータイ「メモ撮り」発想法 (光文社新書)

「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ

「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ

リクルートのDNA―起業家精神とは何か (角川oneテーマ21 A 61)

リクルートのDNA―起業家精神とは何か (角川oneテーマ21 A 61)

自転車で痩せた人 (生活人新書)

自転車で痩せた人 (生活人新書)

快読100万語!ペーパーバックへの道 (ちくま学芸文庫)

快読100万語!ペーパーバックへの道 (ちくま学芸文庫)

Go to Top