5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

投稿者: muneando

  • Thunderbird3のRC版をインストールした話し

    Thunderbird3のRC版をインストール。インストールは簡単。アカウントの移行は、自動的にやってくれる。

    ただいま、インデックスの作成中。これが時間がかかる。

    タブの機能が追加されたが、今のところ右クリックでメール本文をタブに追加できるくらいしかできなそうだ。タブはどのように使っていくのだろうか? わからない。「その他操作」ボタンや右クリックで一つのタブにスレッドを表示したり、右クリックでール本文を表示できるようだ。こちらは小さな画面のノートPCには便利かも。タブは、Firefoxのようにタブの領域でクリックしても何も起こらないので注意が必要。

    スマートフォルダにすると、受信ボックス(Inbox)が複数のアカウントをまとめてしまうのは違和感がある。すべてのフォルダにすれば、いままでどうりになるので問題がないが。

    今のところ、アカウントはimapとGmailだが、問題なく動いている。

    アドオン関係はいまのところ全滅。こちらも注意が必要。

  • ToDo管理でRemember The Milk

    今はスケジュール管理はGoogleカレンダーでやっていますが、ToDo管理は中々いいものがありませんでした。GoogleカレンダーにはTaskという機能がありますが、まだ簡単な機能しかなくて、しかも英語の設定にしないと出てきません。日本語の設定ではTaskの機能は使えません。

    最近、何をやらなければいけないかがわからなくなってきましたので、GoogleカレンダーのTask以外でいいものがないかと探してきました。見つけたのは、定番中の定番Remember The Milkです。メニュー構成やタスクの登録の流れがが自分好みではないとか、期日の指定がカレンダーから入力できないとか、Googleカレンダーと連動しないとかありますが仕方ありません。これだけ使われているということは、自分が知らない何か良い方法があるのでしょうね。

    とりあえず、Google AppsにトップページにRemember The Milkのコンテンツを追加して、GoogleカレンダーにもRemember The Milkガジェットを追加しました。ガジェットの追加方法は、ここを参考にしました。

    でも、使いにくそうなので、GoogleカレンダーのTaskがバージョンアップしてくれることに期待します。

  • 鉄道博物館に行ってきた話し

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

    鉄道博物館展示全景

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

    ミニ運転電車運転中

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

    0系新幹線の鼻

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

    車内でお弁当

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

    発券中

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

  • Bluetoothのイヤフォン

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

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

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

  • Hello world!

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

  • CakePHP: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

    にしてくれます。

  • Windows7と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という外付けのサウンドボードを付けてみました。これで、Windows7でも音が鳴ります。しかも、スピーカーもXPと共有できます。Sound Blaster Digital Music SXは、まだWindows7の64ビットのドライバはベータ版でしたが、正常に動いているようです。

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

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

    マイクロソフト
    ¥15,900 (2025/11/23 10:24時点 | Amazon調べ)
    マイクロソフト
    ¥21,900 (2025/11/22 11:34時点 | Amazon調べ)

    自作PC用に一番左のWindows11のパッケージを実際に購入しましたが、問題なくインストールできました。Windowsは使うPCの分だけ正しくライセンスを購入しましょう。

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

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

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

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

  • CakePHPの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ダンプを見ながら調整していくことをお勧めします。

  • Windows7でのトラブル

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

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

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