2009年2月アーカイブ

symfonyアドベントカレンダー4日目:リファクタリング

3日目までは挫折したなりにも以前やったことがあったのですんなりだったが、4日目にしてグっとボリュームが出てきた感じ。

新しく試したキーワードをざっと挙げるだけでも、

  • モデルにトリガーメソッドを作成
  • パーシャルでフラグメントの整理
  • トランザクション
  • URLルーティング調整
  • カスタムクラス作成

となかなかに盛り沢山。

内容も盛り沢山なので、その分だけわからない点もいくつか出てきた。

例えばInterest.phpのsaveメソッドを修正するところで、いきなり「$this->getQuestion()」が取れてしまうのは何で?schemaの定義に基づいて、modelが関連するQuestionオブジェクトも取得してくれてるってことなのかな。その辺りの自動で済ませてくれている部分が把握できてないと、重複してわざわざ取りに行くようなコードを書いてしまいそう。

ルーティングはかなり柔軟性が高そうで良さげですね。この恩恵を受けるために、テンプレート上のリンクはlink_toヘルパを使うようにすることが大事そう。

カスタムクラス作成でやったタイトルのストリップ処理は、日本語タイトル用にurlencodeするように変えたりしていましたが思うように動いてくれませんでした。これもちょっと課題。

symfonyを入り口近辺でちょろちょろ試してはいたものの、ある程度まとまった知識が欲しいと感じ始めていたので、以前から取り組んではすぐ挫折していたaskeetに再びやることにしました。最低限、24日目まで通してやることが目標。

ちなみにsymfonyバージョンは1.0.19。今から始めるなら1.2系がスジなんでしょうが、askeetチュートリアルDefinitive Guideも日本語訳が揃っている1.0系に有難く頼らせて頂きたいということで・・・。

1日目

環境構築やプロジェクト、アプリケーションの作成など。

Subversion周りの作業など関係無いところはスキップして、とりあえずさくっと終了。

2日目

DB周りの作業をざーっと行う。

$ symfony propel-generate-crud frontend question Question

上記コマンドでCRUDジェネレータを実行するところで、「Questionモジュールが無い」とエラーになりました。そういえばmodule作成する箇所が無かったような・・・。

というわけで、questionモジュールも先に作成しておきます。

$ symfony init-module frontend question

3日目

レイアウトやテンプレートの変更、ルーティング調整、バッチファイルからのテストデータ取り込みなど。

以下、感じたこと。

  • ORMの恩恵受けられるようなDB設計を考慮することが大事。
  • ジェネレータでベース作って、不要なアクション・テンプレートをクリーンアップしていくという流れがやっぱり基本?
  • css落としてきたけど、なんだかレイアウトずれてるんですが・・・。とりあえず無視。

 

ひとまず今日はここまで。

電車ごっこを存分に――「小田急なりきりグッズ」 段ボール電車など3種類 - ITmedia News

うーむ、これは鉄っちゃんなうちの子にぜひ買いたいかも。

特に「Dan-Train 3000形」。こんな段ボール電車かぶって、うちの中電車ごっこされたらかわい過ぎる(笑)

細野真宏の数学嫌いでも「数学的思考力」が飛躍的に身に付く本!
細野 真宏

4093974624
小学館 2008-09-01
売り上げランキング : 30
おすすめ平均 star

Amazonで詳しく見る
by G-Tools

 

本著で言う典型的な「y=x」の非効率なものの見方しかできていない自分にとっては、考え方を軌道修正していけるのでは・・・と期待を持たせるきっかけになる一冊。

ニュースなどをただ聞く・読むだけでなく、自分なりに解釈したり疑問点を挙げたりともう一手間かけることが大事だとは分かっていても、慣れていないとその仮説・検証する方法すら分からないということがあって、そのレベルから具体的に説明してくれている点が良いです。

ただし言っていることは明確でも、本質を理解する力を真に身に付けるのは相当に訓練が要るだろうなあというのは明らかで、この内容を「分かったつもり」から「分かった」までどう到達できるか今後のアウトプットが超重要。

他にも「思考の歩幅」「思考の骨太さ」といった頭の中を整理するものさしが多く紹介されていて、日常生活内にも生かしていければなあと。

ORMは便利だろうけど、パフォーマンスが気になるとかSQLが全部目に見える状態で作りたいとかいう話もあったりして、直接PDO経由でDB操作をしたい場合にどうすれば良いのか試してみました。

 

DSN情報を設定ファイルに記述。 

apps/appname/config/app.yml

all:
  db:
    dsn:  mysql:host=localhost;dbname=test
    user: root
    pass: pass

 

DB接続クラスを作成。 

lib/dbConnection.class.php

<?php
class dbConnection
{
  static private $PDOInstance;

  protected function __construct()
  {
    $dsn = sfConfig::get('app_db_dsn');
    $user = sfConfig::get('app_db_user');
    $pass = sfConfig::get('app_db_pass');

    self::$PDOInstance = new PDO($dsn, $user, $pass);
  }

 

  public static function getConnection()
  {
    if(!self::$PDOInstance)
    {
      new self();
    }

 

    return self::$PDOInstance;
  }

}

actionなどからコネクション取得。 

$conn = dbConnection::getConnection();

で、あとはこのコネクション使っていろいろと、ていう感じで動かしてみていたのですが、おいおい調べていたら自作せずともデフォルトのDB設定でPDO接続を指定できてしまうことを知りました・・・。 

 

config/databases.yml

all:
  pdocon:
    class:       sfPDODatabase
    param:
      dsn:       mysql:host=localhost;dbname=test
      dbtype:    mysql
      database:  test
      username:  root
      password: pass

actionからコネクション取得。 

$conn = $this->getContext()->getDatabaseConnection('pdocon');

action以外から取得。 

$conn = sfContext::getInstance()->getDatabaseConnection('pdocon');

 

なるほど、こっちの方が簡単。

動的にDB接続先を切り替えたりといったこともやってみたかったりするので、それぞれの使い勝手も含めて引き続き調べてみたいと思います。

まだ動かして間もないですが、少しずつsymfonyに慣れてきた気がします。

感想としては、

笑いから言ったら山田與志、

ネタの質でいったらバカリズム、

勝たせたい心情的にはあべこうじ、

だったので、あの優勝結果はあり得ないでしょ・・・と思いました。

検索エンジン3社、正しいサイトURLを認識させるcanonical属性を導入(URLの正規化) :: SEM R

正しいURLを定義したり、同一内容の複数ページのインデックス登録の指定ができるcanonical属性がGoogle、Yahoo!、Live Searchの3検索エンジンで採用されたとのこと。

ちょうど今関わっているEC系の案件で、複数カテゴリーに属する同一商品のメインページをどう処理するかといった議論が挙がったりしていたので、その優先付けを認識させる手段として早速使えそう。

試しに当サイトにもタグを追加してみました。こんな感じです。

<link rel="canonical" href="http://blog.knockoutmarch.com/" />

ブログ上のブックレビューを閲覧できるサイト「読んでる?」がGoogleインデックスから削除されてしまいました。

アクセス数も見事な曲線をたどっています(笑)

Google Analytics
Google Analytics

そもそも実験サイトではあったのですが、ここ数ヶ月アサマシ力が予想以上に高まり貴重な存在になっていた矢先だったので、痛い出来事でした。

原因を推測するに、不適切なページにadsenseが貼られていると警告がきたこと(修正済み)や、sitemap.xml内のページ数がガイドラインの50,000個以上になったことがあった(修正済み)など、気になることはありましたが、一番可能性として高そうなのはインデックス欲しさにsitemapのリストを増やし過ぎたことかなぁ・・・と考えています。

動的ページなのでやろうと思えば幾らでも生成できますが、そこは常識的にアクセスがあったページだけをリストに生成するようにしていたのですが、普通のサイトでは考えにくい単位で数が増えていただろうことは否めません。

取り急ぎ、sitemap周りを調整してGoogleに再審査をリクエストしてみましたが、さてどうなることやら。

 ウェブマスター向けガイドライン - ウェブマスター/サイト所有者 ヘルプ

http://mail.google.com/mail/help/intl/ja/about_whatsnew.html

Gmailが機能追加しましたね。

とりあえず、ラベルが複数同時にON/OFF切り替えられるようになったのと色付けできるようになったのが、個人的には使い勝手かなりUPでいい感じ。

インフルエンザも流行っている昨今ですが、風邪対策ということもあって我が家でも先月から加湿器を買って使っています。

買う時の条件として考えたのは以下の点。

  • 子どもがいるので噴き出し口が熱くならない(ハイブリッド式)
  • 1万円前後
  • 見た目がシンプル

これを加味して店頭で比較し、TIGERの「ASY-A300AZ」を購入しました。

ASY-A300AZ
ASY-A300AZ

決定した要因としては上の条件に加えて、

  • 丸洗いができてフィルタの交換が不要
  • 部屋の温度・湿度から自動で加湿調整をしてくれる

といった点が気に入ったからです。

加湿自動調整機能付き
加湿自動調整機能付き

実際に使ってみると、加湿自動調整機能が便利です。3段階で部屋内の加湿状況をランプで通知してくれるのですが、MAXになると自動で加湿を止めてくれて、さらに「部屋が潤った!」という満足感も得られます(笑)

他にも、私は鼻炎持ちで普段鼻呼吸があまりできないので、冬場は寝て朝起きるとのどがカラカラ&ヒリヒリになっていることが多かったのですが、加湿しながら寝るようになってからはそれがだいぶ軽減されました。(2時間or4時間タイマーも付いています。)

気になる点としては、噴き出し口から出てくる風が結構涼しいことでしょうか。枕元に置いておくとちょっと空気がひんやりし過ぎるような気がします。

でも、今回の買い物には私も奥さんも満足でした。ぜひ長く使いたいと思います。

 

TIGER ハイブリッド式マイコン加湿器 シーブルー ASY-A300AZ

B001GNRPOY
タイガー 2008-09-21
売り上げランキング : 2138

Amazonで詳しく見る
by G-Tools

カード決済履歴を見たら記憶に無いお金が落とされていたので、いろいろ調べていたらovertureからのものと判明。

まあよくよく調べると、確かにこんな説明が管理画面に書いてあった。

ご注意: アカウント残高が、平均クリック料金の3日分から7日分(目安)を下回った場合に、残高不足になります。

気楽に手を出したので自動引き落とし設定になっているのも良く把握してないで使っていたし(取り急ぎ、アカウントの支払い方法設定を「なし」に変更しました)、残高等のメンテナンスも放置状態だったのでこれは反省点。

ただ、今回気になったのはこの請求に関する通知メール。アカウントの言語設定が日本語になっているにもかかわらず、英語でメールが来ていました(それで気付くのがだいぶ遅れた)。

アカウント登録時やニュースレターなんかはいつも日本語で送られてくるのに、なんでより大事なメールは英語なの?

これに気が付かなかったら、今後も残高が減る度に引き落とされ続けてたわけで。

こんな不親切な仕様だと何かこすい思惑を感じざるを得ないのですが・・・。

このアーカイブについて

このページには、2009年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年1月です。

次のアーカイブは2009年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

RSSフィード

  • 購読する

いろいろ

あわせて読みたい

フィードメーター - ポップフライ

seo

Powered by Movable Type 4.01