パン好きのエンジニア

今は主にCakePHPの話 と パン作りの話

CakePHPのプラグインとは何だろう、ということで調べてみました。

■環境

  • OS: CentOS on VirtualBox
  • PHP 5.3.3
  • CakePHP2.3.10

■参考

  • https://github.com/cakephp/debug_kit

■設定

  • プラグインファイル群をダウンロード[https://github.com/cakephp/debug_kit]
  • ダウンロードしたファイルを、[app/Plugin/DebugKit]に展開
  • [app/Config/bootstrap.php]を編集
  • [AppController.php]に追記
  • public $components = array('DebugKit.Toolbar');
    
  • くわしくは[https://github.com/cakephp/debug_kit#installation]を見てください

■注意

  • [Call to a member function setFlash() on a non-object]というエラーが出たら以下の処置を
  • [app/Config/bootstrap.php]に以下を追加
  •     var $components = array(‘Session’);
    

CakePHPの[admin routing]を調べてみました。

■環境

  • OS: CentOS on VirtualBox
  • CakePHP2.3.10
  • http://localhost/cake23/ でCakeアプリにアクセスできるものとします

■まとめと所感

  • [admin routing]は思ってた機能と少し違った。
  • URLに[admin]などのPrefixを挟んだ別ルートを作れる。
  • [admin]という文字列は自由に変更可能。
  • controllerにはadmin_index()などのメソッドを作る。
  • viewでは、admin_index.ctpなどでファイルを作る。
  • 使い道はありそう

■まずはScaffoldingで

  • 設定
    • app/Config/core.php の一部を編集する
    • 以下を追加(元々コメントアウトされている)
    • Configure::write('Routing.prefixes', array('admin'));
      
    • ターゲットのコントローラ(ここれはPetsController.phpとする)で以下を追加する
    • public $scaffold = 'admin';
      
  • 表示
    • http://localhost/cake23/admin/Pets で表示される
    • http://localhost/cake23/Pets だと[Missing Method]となる

■Bakeする

  • 設定
    • 以下のコマンドでコード作成する
    • 		cd /path/to/workspace/cake23/app
      		../lib/Cake/Console/cake bake model Pet
      		../lib/Cake/Console/cake bake controller --admin Pet
      		../lib/Cake/Console/cake bake view Pet
      
  • 表示
    • http://localhost/cake23/admin/Pets で表示される
    • http://localhost/cake23/Pets だと[Missing Method]となる

HiveでJSON形式のデータを扱う方法があるようなので試してみました。
参考にしたのは「タムタムの日記 – HiveでJSON形式のログを構造化する

    • データを作成
$ cat << EOD > sample.txt
> {"name" : "Yamamoto", "age": 28}
> {"name" : "Yoshimura", "age": 30}
> EOD
    • HIVEにLOAD
CREATE TABLE raw_data(line string);
LOAD DATA LOCAL INPATH '/home/kawamura/work/20130526_json_tuple/sample.txt' OVERWRITE INTO TABLE raw_data;
    • VIEW作成
DROP VIEW IF EXISTS sample_view;
CREATE VIEW IF NOT EXISTS sample_view (
  name,
  age
)
AS
SELECT t1.name, cast(t1.age as int)
FROM raw_data
LATERAL VIEW json_tuple(raw_data.line, 'name', 'age') t1 as name, age;
    • SELECT from VIEW
SELECT *
FROM sample_view
WHERE age > 29;

TAB区切りのデータだと時々困ることがあります。
データによってカラムが違うことや、後からカラムを追加したくなったり。
あとは処理時間がどのくらい違うかかなぁ。

fluentd

コメントなし

かなり久々の投稿です。

前から興味を持っていた「fluentd」を試してみました。
参考にしたサイトはここ

意外と簡単にインストールすることができました。
試してみたので以下だけですが。

  • fluentdインストール(td-agent)
  • fluent-catでログを送る
  • Apacheのアクセスログを収集
  • Apacheのアクセスログを収集中に Apache log をlogrotate

気になっていたのは最後。
「ログを参照している間に、ログがlotateされたらどうなるんだろう」
と思っていたが、試してみるとうまくいった。

td-agentのログを見るとこんな感じ

2013-05-19 18:33:04 +0900 [info]: detected rotation of /var/log/httpd/access_log; waiting 5 seconds
2013-05-19 18:33:06 +0900 [info]: detected rotation of /var/log/httpd/access_log
2013-05-19 18:33:07 +0900 [info]: following tail of /var/log/httpd/access_log

どうやら、tail しているログに対する rotationを検知してtail し直しているみたいですね。
どうやって実現しているかはまだ不明ですが。

CakePHP2.1のPHPUnit(つまり単体テスト)を試してみた。
といっても、マニュアル通りに実行してみただけ。

■環境

  • OS: CentOS on VirtualBox
  • IDE: Eclipse 3.5 Galelio
  • CakePHP2.1.2

■前提

  • CakePHP2.1がWebで動いていること

■PHPUnit インストール

  • 以下のコマンドを実行し、PHPUnitをインストール
    pear upgrade PEAR
    pear config-set auto_discover 1
    pear install pear.phpunit.de/PHPUnit
    

■Database設定

  • MySQLでの設定
    • MySQLにログインし、以下の2つのデータベースを作成(データベース名は適宜変えてください)
    • “cake21″と”cake21_test”
  • Cakeでの設定
    # cd /mnt/workspace/cake21
    # ./lib/Cake/Console/cake bake
    (次々とデータベース設定に必要な項目の質問に答える)
    ※ "default"と"test"という2つを作成する
    

■動作チェック

  • 以下のページにアクセス
    • http://localhost/cake21/test.php
    • “localhost”や”cake21″の部分は適宜書き換えてください。
  • “Core”の下の”Tests”をクリック
  • “AllConfigure”をクリック
  • 以下のような表示が出ればOK
      11/11 test methods complete: 11 passes, 0 fails, 25 assertions and 0 exceptions.
      

■参考

  • http://book.cakephp.org/2.0/en/development/testing.html

CakePHP2.1をお試し

■環境

  • OS: CentOS on VirtualBox
  • IDE: Eclipse 3.5 Galelio
  • CakePHP2.1.2

■前提

  • CentOSがインストールされていること
  • Apacheがインストール&起動されていること
  • Apache上でPHPが動く状態にあること
  • mod_rewriteが動くこと
  • http://localhost/ でページが表示できる設定となっていること

■CakePHPダウンロード

  • 以下のページにアクセス
    • http://cakephp.jp/
  • CakePHP2.1系の最新版をダウンロード
  • Eclipseから参照しているフォルダに展開
  • フォルダ名は適当に変更する(ここでは”cake21″とします)

■ブラウザから確認

  • ドキュメントルート設定
    • 以下の例を参考にドキュメントルートを設定する
      # cd /var/www/html
      # ln -s /mnt/workspace/cake21/app/webroot cake21
      
  • ブラウザから動くことを確認します。
    • http://localhost/cake21/
    • Cakeのデフォルトページが表示される。
  • “app/Config/core.php”を修正する
    • ‘Security.salt': 適当に文字を変える
    • ‘Security.cipherSeed': 適当に数字を変える

ここも参考にどうぞ。

CapistranoをCentOSにインストール

CentOSにCapistranoをインストールしたが、色々と行き詰ったのでメモしておく。
Capistranoとは複数サーバに色々とコマンドを実行できるツール。

やりたいこと

  • CentOSにCapistranoを入れて動かす。

コード

#!/bin/sh
export LC_ALL=C

yum install yum-fastestmirror -y

#----------------------------------------------
# Ruby 1.8.7
#----------------------------------------------
yum remove ruby -y
cd /usr/local/src &&
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz &&
tar zxvf ruby-1.8.7-p72.tar.gz &&
cd ruby-1.8.7-p72 &&
./configure --prefix=/usr &&
make &&
make install

#----------------------------------------------
# openssl
#----------------------------------------------
yum install openssl-devel.i386 -y &&
cd /usr/local/src/ruby-1.8.7-p72/ext/openssl &&
ruby extconf.rb &&
make all &&
make install

#----------------------------------------------
# zlib
#----------------------------------------------
yum install zlib-devel -y &&
cd /usr/local/src/ruby-1.8.7-p72/ext/zlib/ &&
ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib &&
make &&
make install


#----------------------------------------------
# rubygems
#----------------------------------------------
cd /usr/local/src &&
wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz &&
tar xvzf rubygems-1.3.6.tgz &&
cd rubygems-1.3.6 &&
ruby setup.rb


#----------------------------------------------
# capistrano
#----------------------------------------------
gem install capistrano
cap -h

exit 0


注意点

  • 細かいバージョンなどは適宜変えてください。

Javascriptで画像の読み込みを待つ

あまり得意でないけど、Javascriptで少し調べたことがあるのでメモ。

やりたいこと

  • 画面遷移時の画像読み込みを制御したい
  • 遷移前に特定の画像を読み込む(タグ計測の為)
  • 画像が読み込めたら遷移させる
  • 画像が読み込めなくても一定時間で遷移させる

コード

<html>
<head>
<title>Image load test</title>
</head>
<body>

<a id="next" href="http://192.168.56.101/" onClick="return loadImage();">Next page</a>

<script type="text/javascript">
<!--
// 遷移実行
function redirect() {
  var element = document.getElementById("next");
  location.href = element.href;
}

// 画像読み込み
function loadImage(){
  var img = document.getElementById("tag");
  img.src = "http://192.168.56.101/img.png";
  img.onload = function() {
    redirect();
  }

  // タイムアウト時間をミリ秒で指定
  var timeout = 5000;
  setTimeout(redirect, timeout);

  // 通常の画面遷移は無効に
  return false;
}
//-->
</script>

<img id="tag">

</body>
</html>

注意点

  • IEだと画像がキャッシュされているとタイムアウトまで待ってしまう。
  • setTimeout()はブラウザにより引数が違うらしい。

久々の投稿。。。

最近、暑いからラッシーを作ってます。
意外と簡単にできる。

材料はこれだけ。

  • ヨーグルト(プレーン)
  • 牛乳(ヨーグルトと同量)
  • 水(ヨーグルトと同僚)
  • はちみつ(小さじ4くらい)
  • レモン果汁(10滴くらい)…ポッカレモンみたいな

あとは基本的に混ぜるだけ。
私はBamixを使ってます。

手順

  • 容器にヨーグルトとはちみつを入れる
  • さらに水を加えて軽くスプーンでかき混ぜる
  • レモン果汁と牛乳を加えてBamixでかき混ぜる

グラスに氷を3~4個入れて、そこに注げば完成です。
マンゴージュースを加えてマンゴーラッシーにすると、さらに美味しいです。

ちょっとだけですが塩を加えています。
たくさん作っても冷蔵庫に入れておけば数日間は大丈夫です。

データベース定義の管理 ~ERMasterをお試し~

■環境

  • Eclipse 3.5 Galelio

■データベース定義の管理

  • きっかけは「データベースのER図を自動で作成してくれないかなぁ」
  • で、探してみました。

■候補

■ERMaster