2009年11月のアーカイブ

11/22鉄道博物館に行ってきました

チビと鉄道博物館に行ってきました。三連休の初日ということで混んでいるのを覚悟していましたが、そんな心配は全く無しでした。

鉄道博物館展示全景 送信者 北青山通信

チビの大きなイベントは、ミニ運転列車。小さな電車をマスコン、ブレーキを操作しながら運転できる体験ものです。もちろん、信号を守って運転しなければいけません。安全第一なのです。

ミニ運転電車運転中 送信者 北青山通信

私と言えば、一番感動したのは、0系新幹線でした。とっても美しい造形なのです。車内もオリジナルに近い座席があったりと、とても懐かしかったです。

0系新幹線の鼻 送信者 北青山通信

お昼は、館内で駅弁を買って、車内で食べられる車両がたくさんありますので、お昼を買わずに行くのはお勧めです。食堂車のメニューがあるカフェテリアもあります。

車内でお弁当 送信者 北青山通信

最後に体験イベントで、みどりの窓口の切符の販売の体験もやってきました。切符も発券してくれます。

発券中 送信者 北青山通信

増築工事もやっていましたので、また行きましょうか・・・。

11/20Bluetoothのイヤフォン

これまでいくつのBluetoothのイヤフォンを買ったのだろう? 充電が面倒とか、ペアリングがうまくいかないとか、すぐに電池が切れるとか、いろいろと問題があった。最近は、Bluetoothから遠ざかっていった。

しかし、懲りずにBluetoothのイヤフォンを買ってしまった。買ったのは、BUFFALOのBSHSBE06BKというイヤフォン。充電が普通のミニUSBでできるのは便利。持っているau携帯と簡単にペアリングできた。やはり、ワイヤレスは便利なのです。

これからLISMOプレイヤーで使っていこうと思う。結果はいずれまた。

11/17Hello world!

へようこそ。これは最初の投稿です。編集もしくは削除してブログを始めてくだださい !

11/15CakePHP:paginateのsortに複数のソート項目を追加する。

CakePHPで用意されているpaginateのsortのメモです。paginateのsortは便利ですが、最初はテーブルの1項目しかソートの対象になりません。お客さんから、「価格」と並び替えるときに、もう一つ「価格条件」でも合わせてソートしてくれという入り用とのこと。しかし、CakePHPのレファレンスによると、ソートするには一つの項目だけしかソート項目を指定できません。・・・/cake/libs/controller/controller.phpのpaginate()のソースを追っても、複数のソート項目を設定できるようにはなっていません。

そこで、再度調べてみると、検索する前にモデルでbeforeFind()を呼んくれるとのこと。そこでモデルでbeforeFind()を定義して、ここでソート項目を追加してしまうことにしました。例えばこんな感じ(だいぶコードを省略しています)。

function beforeFind($queryData) {

   array_unshift($queryData['order'], array(‘XXX.item’ => ‘desc’));

   return($queryData);

}

ORDER BY句の最初に

XXX.item desc

が追加されます。$queryData['order']は配列で、配列の順番でORDER BY句に追加していきますので、

$queryData['order'][] = array(‘XXX.item’ => ‘desc’);

とすると、ORDER BY句の最後に、

, XXX.item desc

が追加されます。これで、複数の項目でSORTできます。

ここからついでの話しです。ORDER BY句に、ちょっとしたSQL関数を追加したい場合、例えば、

XXX.item is NULL desc

を追加した場合(あまりありませんが・・・)、

array(‘XXX.item is NULL’ => ‘desc’)

と指定してしまうと、

“XXX”.”item” is NULL” dess

と解析されてSQLエラーになってしまいます。これは、

array(‘(XXX.item) is NULL’ => ‘desc’)

として括弧で括ってあげれば、ORDER BY句には、期待通り、

(XXX.item) is NULL desc

にしてくれます。

11/15Twitter Weekly Updates for 2009-11-15

  • また、日本エステートいう会社から電話。以前、もう電話するなと言ったが、また電話があったので今度こそ電話を止めてもらう。 #
  • また、セールス電話が多くなった。金融商品とか壁の塗り替え、屋根、リフォームとか。断っても断ってもダメ。また名簿が回っているのか?? #
  • [MM読了]+DB PRESS Vol.51 http://bit.ly/3dcHPt #
  • 集中。集中。 #
  • [MM登録]BE-PAL (ビーパル) 2009年 12月号 [雑誌] http://bit.ly/28mmxZ #
  • [MM登録]ガルヴィ 2009年 12月号 http://bit.ly/IZtG5 #
  • [MM登録]日経 Linux (リナックス) 2009年 12月号 [雑誌] http://bit.ly/E60V6 #
  • [MM登録]エレキジャック 2009年 11月号 [雑誌] http://bit.ly/u7lya #
  • [MM登録]四度目の氷河期 http://bit.ly/3vdRfU #
  • [MM登録]棘の街 (幻冬舎文庫) http://bit.ly/1nxn2P #
  • [MM読了]夢見る黄金地球儀 http://bit.ly/2yqwd7 #
  • こんなデジカメを出すなんて、リコーはなんておバカな会社なのだ。でも、そんな会社が大好きなのです。http://bit.ly/27Xndx #
  • 朝起きたら、Vistaがブルースクリーン。 #
  • これは安くなった。契約してしまおうか。Googleのウェブアルバム。https://www.google.com/accounts/PurchaseStorage #
  • [MM週間記録11/8-11/14]登録6件/購入6件/金額5900円/読了1冊 http://mediamarker.net/u/anpasan/ #
  • [MM登録]20世紀少年 第1章 終わりの始まり 通常版 [DVD] http://bit.ly/3PCiwx #
  • [MM登録]20世紀少年<第2章> 最後の希望 http://bit.ly/4yHkiJ #
  • [MM読了]20世紀少年<第2章> 最後の希望 http://bit.ly/4yHkiJ #
  • [MM読了]20世紀少年 第1章 終わりの始まり 通常版 [DVD] http://bit.ly/3PCiwx #
  • [MM読了]日経 Linux (リナックス) 2009年 12月号 [雑誌] http://bit.ly/E60V6 #
  • [MM読了]日経ソフトウエア 2009年 12月号 [雑誌] http://bit.ly/1qgO73 #
  • [MM読了]BE-PAL (ビーパル) 2009年 12月号 [雑誌] http://bit.ly/28mmxZ #
  • [MM読了]Software Design ( デザイン) 2009年 11月号 [雑誌] http://bit.ly/3l0hn2 #
  • [MM読了]WEB+DB PRESS Vol.52 http://bit.ly/1c9yXX #

Powered by Twitter Tools

11/14Windows7とXPの切り替え

ほとんどWindows7で作業をしています。といっても、仕事ではデスクトップ経由で青山オフィスのXPにアクセスしていますが。

簡単にセットアップできたWindows7ですが、インストールできていなかったのは周辺機器でした。DVDを見ようとしたら音が鳴らない。スピーカーが付いていないのでした。

PCにはマザーボードにサウンドカードの機能が付いています。すでにドライバが自動的にインストールされています。スピーカーを付ければいいのですが、7とXPを2つスピーカーを付けるのもイヤですね。

そこで、今はWindows7とXPを2台のPCにインストールして、ELECOMのKVM-DVU2という切換機で切り替えています。KVM-DVU2にはUSBを切り替えるという機能が備わっています。しかし、いままで使っていませんでした。

今回、そのUSBにエプソンのEP-301というプリンタと、CREATICEのSound Blaster Digital Music SXという外付けのサウンドボードを付けてみました。これで、7でも音が鳴ります。しかも、スピーカーもXPと共有できます。Sound Blaster Digital Music SXは、まだWindows7の64ビットのドライバはベータ版でしたが、正常に動いているようです。

KVM-DVU2にUSBの切り替え機能があるのは知っていましたが、ようやく役に立つことになりました。

ただし、KVM-DVU2という切換機は、たまに勝手にキーが連続して入力してしまうとか、例えばaを一文字入力しても、aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaとが連打される、グラフィックボードによってはPCを切り替えると解像度が変わるとか、問題が無い訳ではありません。KVM-DVU2を経由しても画面が汚くなるということもありませんので、まあ今のところ満足です。モニタがDVIでキーボードとマウスがUSBというのは、まだ選択肢が少ないし、値段も高いですし、本当は4ポートが欲しかったのですが・・・・。

11/13Googleリーダーで異常に写真が大きくなるサイト

Googleリーダーである有名写真家(クラシックカメラとか、高級デジカメの批評で有名な人)を見ると、掲載している写真が大きくて、Googleリーダーからはみ出すのです。

オリジナルのサイトでは、正しくレイアウトされているので、原因はアップしている写真の大きさ。無駄にサイズが大きいのです。これは意図的にやっているのか、わかりませんが・・・。

Googleリーダーでは写真が拡大されて表示してしまうので、ピントが甘いのがわかってしまうのが残念です。

11/12CakePHPのpaginateの最適化

ページングが簡単にできてしまうCakePHPのpaginateはとても便利です。パラメーターをちょっと設定してあげるだけなので、誰でも使いたくなるはず。

しかし、このpaginateには、大きな落とし穴があります。いくつものアソシエーションを設定されているモデルに対してpaginateを使うと、とても遅いのです。

これはpaginateだけではなくfindAllでも言えること。何も考えずに使うと、結果が返ってこないのです。

デバッグレベルを3にするとわかるのですが、大量にSQLが生成されます。この辺りをきちんとチューニングしてあげないといけません。

paginateの最適化を調べましたが、なかなか検索にひっかかりません。仕方ないので、試行錯誤。結局は以下の通り。

必要のないアソシエーションは実行する前に削除しておく。モデルクラスで最初に$hasManyを定義しますが、このままですと勝手にそのモデルへの抽出のためのSQLを発行してくれます。paginateのfieldsオプションに、抽出したい項目を並べておけば、それだけをSQL一つで抽出してくれるかと思っていましたが、これは大間違え。$hasManyに定義されているモデルに対して1レコードづつ改めてSQLを生成します。

あと、アソシエーションが3つになると、例えばA->B->Cと各モデルがhasMany,belongsToのアソシエーションを定義されているとすると、Aに対してpaginateをすると、A->Bで参照されたSQLを発行して、その後各レコードでCを参照するSQLが発行されてしまいます。したがって、Cがあまり大きなテーブルではなくて、ほとんど更新がないようなテーブルだと、データを配列に格納して参照させたほうがいいかもしれません。

とにかく、CakePHPのpaginateやfindAllは、余計なSQLを発行してくれます。いかに無駄なSQLを削除するかがパフォーマンスの分かれ目です。

今回、以上の方法でCakePHPから発行しているSQLの数を一桁以上減らすことで、paginateのパフォーマンスをあげました。一番のCakePHPのチューニング方法は、core.phpでデバッグレベルを3にして表示されるデバッグ情報のSQLダンプを見ながら調整していくことをお勧めします。

11/08Twitter Weekly Updates for 2009-11-08

  • サザエさんが日本シリーズのため中止。楽しみにしていたチビは大荒れ。 #
  • メディアマーカーは漫画が多い。http://mediamarker.net/ #
  • 忘れないうちにドメインの更新の手続きをとっておく。 #
  • この手の記事は、新しいWindowsがリリースされると出るが、決まって答えは同じ。どの会社も7が出たって、いきなり返る会社はないのでは? http://www.itmedia.co.jp/news/articles/0910/29/news014.html #
  • [MM読了]相棒 season5上 http://bit.ly/1ieC5P #
  • 松井すごかった。 #
  • だんだん開発案件が落ち着いてきた?? #
  • 何で人は携帯電話を持つと、本屋でもラーメン屋でも声高に話せるのだろう。 #
  • メディアマーカーのレコメンド機能。タイトルのキーワードから一致させるなんて、何て単純な。 #
  • [MM週間記録11/1-11/7]登録0件/購入0件/読了1冊 http://mediamarker.net/u/anpasan/ #

Powered by Twitter Tools

11/07Windows7でのトラブル

7 64bitを使ってのトラブルは、あまりないようですが、自分でわかっているのは次の2件。

  • リモートデスクトップ接続でWindowsVistaから切断したときに、WindowsVista側で画面の解像度が変わってしまう。
  • Windows Live WriterのAmazonアフリエイトリンクを作成してくれるプラグイン「Amazon Associate JP plugin」で商品を探しに行くとエラーになる。
  • キヤノンの古いPIXUS MP730というプリンタをプリンタサーバー経由だと双方向通信できない。ただし、PIXUS MP730がプリンタサーバー経由で印刷できるだけましか。

あまり、大きな影響はないですが、ただ面倒なだけです。