気になるDJ

Glenn Underground が、3月15日に西麻布Yellowに来る予定。

Glenn Undergroundは、とても気になるDJ。
1枚のレコードをきっかけに、すぐに名前が頭に刻まれた。
オリエンタルな雰囲気を連想させる音がかなりグッっとくる。
今は閉まってしまった恵比寿MILKでもかけたし、ついこの間のSignumでも。
以前つくった『 co-hey mix vol2 』にも入れた。

CISCO検索結果のIndians & Bagpipesという曲です。

他の作品にも好みのものが多いです。
今週末ケリーチャンドラーがYellowでプレイしますが、私的には
Glenn Undergroundの方が数倍気になっています。

まだ一か月以上先なので、予定はなんともいえないですが、
もしいけそうなら、ぜひプレイを聞いてみたいものです。

ログインチェックをプラグインにて行う

今回は、会員サイト等でよく使うログイン状態チェックを、
プラグインで実現するためのクラスを作りました。

ログイン状態チェックは、ログイン画面以外では必ず必要で、
しかも通常の処理(データ登録、参照等)とは関連しないので、
プラグインにするのに、うってつけだと思ったのです。
サンプルソースは以下になります。

Zend_Loader::loadClass('Zend_Controller_Plugin_Abstract');
Zend_Loader::loadClass('Zend_Session');
Zend_Loader::loadClass('Zend_Controller_Action_Helper_Redirector');

require_once('models/authModel.php');

class Zend_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
 public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
 {
   Zend_Session::start();

   $auth = new authModel();

   $controller = $request->getControllerName();
   $action   = $request->getActionName();

   if (($controller == 'index') && ($action == 'index'))
   {
    // ログイン画面の場合は、認証情報削除
    $auth->logout();
   }else{
    if (!$auth->isAuth()){
     // 認証エラーの場合は、認証情報を削除し、ログイン画面へ
     $auth->logout();
     $helper = new Zend_Controller_Action_Helper_Redirector();
     $helper->gotoUrl('/');
    }
   }
 }
}

この例では、http://test.com/にログイン画面があることを想定しています。
そのため、コントローラー名、アクション名がindexの場合は、
一旦、保持しているログイン状態を破棄しています。

今回は、DBデータに問い合わせる方法で、ログイン認証を行い、
ログインOKの場合は、ログイン情報(login_id等)を
セッションに保持するというサンプルソースを作りました。
そのため、このプラグインの中で、Zend_Session::start()も実行しています。

authModelは、認証系の処理を集めたモデルクラスです。
これについては、また後日サンプルソースを公開します。

Imaizumi Atsuo が曲をリリースしました

前回の記事で書いた Signum のオリジナルメンバーであるImaizumi Atsuoが、
2008/02/01に レーベル re:soundより「AKARI EP」をリリースしました。

クラブミュージックのオンラインストアとして有名な「BeatPort」だけではなく、
iTune Music Storeでも購入することが可能です。

配信サイト一覧:
[ beatport ]
https://www.beatport.com/en-US/html/content/release/detail/93896/akari_ep
[ iTunes (world-wide) ]
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=271534863&s=143441

ぜひ試聴してみてください。
テクノ、ハウスに興味がある方は特に気に入っていただけると思います。

私は、Mugenが一番好きです。

初めての2時間超え

2/3の日曜日に、渋谷Moduleにて、DJしてきました。
参加してもうすぐ一年のサンデーアフタヌーンパーティー Signum 。
これまで、ラウンジフロア、メインフロアでプレイさせてもらいましたが、
メインフロアで、しかも2時間20分っていう今までに未経験な長時間。
お客さんが少ないオープンからでしたが、かなり楽しかったです。

ピアノのインストからスタートし、そのままハウスでいったんあげていき、
テックハウスへ移行、その後、オリエンタルな雰囲気の曲をかぶせて、
アフロビートな曲へ、最後にまた少し電子音を多く含んだ曲で終了。

普段ミックスしないよな曲を、合うかもと思いミックスしてみたら、
自分がイメージしてた以上に、体がたぎるような気持ちになったり、
新たな発見もいくつかあったプレイでした。

失敗した部分もありましたが、納得度、満足度では、
今年の冬で一番のプレイになったと感じています。

今まで家でDJやるときは、相性がいい曲を探したりしていましたが、
クラブでやるときのように、ずっと流れを考えながら、プレイして、
それを録音して聞き返す方がいいのかもしれません。

緊張感も増すし、より集中して家DJができそうです。
この機会を与えてくれたSignumクルーには感謝します

http;//signum-tokyo.com

かるめらのケーキ

渋谷セルリアンタワーの1Fにある「かるめら」というお店があります。
いつもと違った甘いものを食べたくなって、このお店でケーキも売っていることを
思い出し、会社帰りに見に行ったところ、おいしそうに並んでいました。

フランボワーズ?がのったカスタードクリームを使ったケーキと、
チョコでコーティングされたケーキを今回は選び、晩御飯の後のお楽しみに。

食べてみると、かなりおいしい。
ちゃんと甘いんだけど、水とかコーヒーで口直しをする必要がない。
1つのケーキでも、いろんな材料が入っていて、飽きることもない。
ケーキ1つあたりのお値段は500~600円台ですが、その価値はあると思います。

海南鶏飯食堂のチキンライスと同じで、食べた後しばらくすると、
また食べたいなって思ってしまう味です。
まだ種類はいくつもあったので、次は違う味を試します。

かるめらと語呂が似てるんですが、「カラメル」ってサイトを知っていますか?
ショッピングモールサイトで、カラーミーショップっていうネットショップサービスを
使って運営されている多くのネットショップの中から、いろんな商品を
検索して見つけ出すことができます

カラメル     : http://calamel.jp
color me shop : http://shop-pro.jp

ここでみつけたあおさ醤油
この醤油、醤油だけでのりの佃煮みたいな味がするんです。
瓶詰で、「アラ!」っていう海苔佃煮がありますが、あれに似た味がします。
ご飯にこの醤油だけで、おいしいんです。
卵ごはんにしても、だいぶおいしそうです。

先週、我が家にも炊飯器がきたので、近々卵ごはんをやってみます。

DBアダプタ作成処理をプラグインにて行う

Dbハンドラの生成をmodelクラスで行っていたのですが、
複数のモデルクラスを使う処理の場合もあるので、どこか1か所に
生成処理をまとめられないかなと思って、たどりついたのがプラグインでした。

ソースは、以下

Zend_Loader::loadClass('Zend_Controller_Plugin_Abstract');

Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Table_Abstract');
Zend_Loader::loadClass('Zend_Config_Ini');

class Zend_Controller_Plugin_DbAdapter extends Zend_Controller_Plugin_Abstract
{
 public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
 {
  // DBアダプタ生成
  $config = new Zend_Config_Ini('config/system.ini', 'default');
  $db = Zend_Db::factory($config->database->adapter,
              $config->database->params->toArray());
  $db->setFetchMode(Zend_Db::FETCH_ASSOC);

  // Db Tableクラス利用DBアダプタ設定
  Zend_Db_Table_Abstract::setDefaultAdapter($db);
 }
}

こうやっておけば、どこのクラスでも

Zend_Loader::loadClass('Zend_Db_Table_Abstract');

$db = Zend_Db_Table_Abstract::getDefaultAdapter();

とすると、Dbアダプターが取得できます。
Dbアダプターを作成するモデルクラスを基底クラスとして、作っていたのですが、
こちらの方が全然いいなと思いました。

プラグインを有効にするには、フロントコントローラに登録する必要があります。
index.phpで以下の行が必要です。

require_once('Custom/Controller/Plugin/DbAdapter.php');

$front = Zend_Controller_Front::getInstance();
$front->registorPlugin(new Zend_Controller_Plugin_DbAdapter());

プラグインで、ログイン状態判定もできそうだなと思っています。

Zend_ViewでSmartyをラップする6

今回は、やりたいことの2つ目、3つ目に入っていた
2.プログラムが必要ない場合は、Actionコントローラーを書きたくない
 (Actionメソッドがなくても、テンプレートが表示されるようにしたい)
3.テンプレートもないURLが指定されたら、トップページなど指定のURLに遷移させたい
を実現する方法です。

Zendは、初期状態で、ErrorHandlerプラグインというプログラムが有効になっています。
これは、プログラム実行中に、エラーが発生した場合、
ErrorActionコントローラーのerrorActionというメソッドをよびだしてくれます。

そこで、コントローラークラスが見つからなかった場合、
アクションメソッドが見つからなかった場合の判別が可能です。
私が作った、ErrorActionクラスから必要な部分を抜き出したのが以下です。

class ErrorController extends Zend_Controller_Action
{
 public function errorAction()
 {
  $errors = $this->_getParam('error_handler');

  switch ($errors->type)
  {
   case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
    if ($this->_getParam('action') == 'index')
    {
     $view = $this->getHelper('viewRenderer');
     $view->setNoController()
         ->setScriptAction($this->_getParam('controller'));
    }

   case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
    if (!isset($view))
    {
     $view = $this->getHelper('viewRenderer');
     $this->getRequest()->setControllerName($this->_getParam('controller'));
     $this->getRequest()->setActionName($this->_getParam('action'));
    }

    $template = $view->getViewBasePathSpec() . $view->getViewScript();
    if (!is_readable($template)) $this->_redirect('/');
    break;

   default:
    break;
  }
 }
}

Zend_ViewでSmartyをラップする5

前回で、Smartyの利用と、ViewRendererヘルパーを利用して、
Smartyを利用した画面の自動描画が有効になる方法を紹介しました。

今回は、やりたいことの1つ目にあげていた
1.テンプレートの配置をURLからイメージしやすいようにしたい
ということを実現する方法です。

この方法を実行するのは、各コントローラーのindexActionのみです。
そこで、このどちらかを記述すればOKです。

$this->getHeler('viewRenderer')
   ->setNoController()
   ->setScriptAction($this->getRequest()->getControllerName());

または

$this->render($this->getRequest()->getControllerName(), null, true);

これはどちらも同じ意味になります。

こうすることで、
http://test.com/aaa/ というURLでアクセスされた場合、
templates/aaa/index.htmlではなく、templates/aaa.htmlを読み込んでくれます。

Zend_ViewでSmartyをラップする4

前回の記事で書いたことを試してみました。
私がsmartyとZendを合わせて使う上で、実現したいのは以下

1.テンプレートの配置をURLからイメージしやすいようにしたい
 http://test.com/aaa/ の場合は、templates/aaa.html
 http://test.com/aaa/bbb/の場合は、templates/aaa/bbb.html

2.プログラムが必要ない場合は、Actionコントローラーを書きたくない
 (Actionメソッドがなくても、テンプレートが表示されるようにしたい)

3.テンプレートもないURLが指定されたら、トップページなど指定のURLに遷移させたい

1.は、renderのnoControllerがtrueのときのテンプレート作成ルールを、
コントローラー名+指定拡張子とすることで解決。
ただし、render呼び出しの際に、
$this->render(コントローラー名, null, true)
とする必要がありますが、この部分を簡略化できないかが今後の課題です。

2.はまだ試せてません。しかし、前々回の記事の方法が応用できそうです。
3.も2.と同様に前々回の記事の方法で実現できそうです。

しかし、前回と同様の方法だと、Zend_Controller_Actionのサブクラスを基底クラスとして
作成することになるので、これはできれば避けたいところです。
会員サイトとかなら、基底クラス作るのはいいのですが、Smarty使いたいだけで、
基底クラスを作るとなると、ログインセッション管理をやろうと思ったときに、
テンプレートエンジンに関わるファイルを修正することになりかねません。

index.phpにつぎたした部分は以下です。

require_once('Zend/Controller/Action/Helper/ViewRenderer.php');
require_once('Custom/View/Smarty.php');

$view = new Zend_View_Smarty(null, $smartyConfig);

$viewHelper = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewHelper->setViewBasePathSpec($smartyConfig['template_dir'])
      ->setViewSuffix('html');
Zend_Controller_Action_HelperBroker::addHelper($viewHelper);

$smartyConfigは、Smartyの設定値の配列です。
Custom/View/Smarty.phpは、Zend_View_Interfaceに沿って、
Smartyが使えるようにしたViewクラスです。
中身は、ここの最後の方にのっているSmartyラッパークラスと同様です。
ただ、function getScriptPaths()に誤りがあります。

return $this->_smarty->template_dir;
  ↓
return array($this->_smarty->template_dir);

とする必要があります。
getScriptPaths()なので、パスが配列で複数取得されることが想定されて、
Zend_Controller_Action_Helper_ViewRendererが作成されているためです。

これでより少ないソースで、smartyと連携できるようになりました。
より手間を少なくする方法がないか、もうちょっと試してみる予定です。
ViewRendererヘルパーと、ErrorHanderプラグインあたりを組み合わせると、
なんとかなりそうな気がドキュメントを読んでいるとするのですが、どうなんでしょう。
あたりがついたら、試してみます。

MTの記事作成画面を見やすくする

私はブログを書く時、テキストで書いてからコピペするわけではなく、
MTの登録画面で直接書いています。そして、書きながら時々保存します。
家で書いたり、会社の休み時間に書いたりするからというのが理由の1つですが、
単に、この編集画面の方が書こうっていうテンションが上がるってのが一番です。

この画面を見続けていると、家のPCの彩度とかをDVDとか動画を見るために
高めにしているのもあって、目がチカチカしてきます。
そこで、背景を薄めの灰色に、文字も目に優しそうな深緑な感じに、
でも、文字はもうちょっと小さめに変更したんです。

思ったより手間取りました。
スタイルシートで、文字の大きさ、文字色はすぐ変更できたのに、
背景だけがなかなか変わらない。全然変わらない。

ブラウザのソースを見るを見てみると、テンプレートのsytle=””で、
直接白が指定されていました。。。
まさかそんなことしてないだろうっていう先入観で、気づくのに30分くらいかかった。

tmpl/cms/edit_entry.tmpl っていうテンプレートです。(MT4を使ってます)
あー、仕事後にZendいじろうって思っていたら、できなかったです。
週末にでもやってみることにします。