5丁目通信(仮称)

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

カテゴリー: システム関連

  • データベースモデリングツールCrayからER Masterに移行した話し

    今までデータベースを設計するには、Cray Database Modelingというツールを使っていました。Cray Database ModelingはPro Editionのライセンス購入しています。Pro Editionの有償版を購入することで、ドキュメントの出力とDBからのインポート(リバースエンジニアリング)が可能です。しかし、開発元のアッズーリから新しいバージョン販売によって、現在のバージョンのサポート中止、現バージョンのダウンロードの中止になってしまいました。新しいバージョンにするには、再度ライセンスを購入する必要があります。しかも、新バージョンのライセンス価格は値上げになっています。これは、商用のソフトウェアを利用する上での、悪いことが重なっているようで、今回移行のバージョンアップは見送りにしてしまいました。

    このまま、旧バージョンになったCrayを使い続けていけばいいのですが、旧バージョンがダウンロードできないということと、このような仕打ちをする会社の製品を使いたくない、さらによりよいソフトウェアを使っていきたいと思いますので、次のモデリングツールと探すことにしました。

    条件としては次の通りです。

    • E-R図を作成できる。当たり前!
    • 対応するデータベースは、PostgreSQLとMySQL。できればSQLServerも対応。
    • CREATE TABLEを含んだDDLを出力できる。
    • データベースのテーブル構造図を出力できる。
    • Eclipseのプラグインとしてインストールできる。

    そこで見つかったのは、ER MasterというER図用GUIエディタです。

    ER図用GUIエディタといっても、以上の条件はすべてクリアしています。しかも、Crayと違ってテーブル構造図はExcelのファイルに出力できます。CrayはHTMLファイルしか出力できませんので、紙での配布では違うフォーマットにしてあげないといけないので大変でした。Excelに出力できることで、顧客へのドキュメント提出は楽になります。しかし、まだExcelファイルへは英文なので、テンプレートをなんとか修正しなければいけないようです。

    とりあえず、ER Masterを使っていきたいと思います。これでCrayを使う理由はなくなってしまいました。使用結果は、順次書いてきます。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/11/23 11:38時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。

    追記(2021年7月2日)

    この記事を書いてから随分経ちますが、今はER Masterは使っていません。そもそもEclipseを使っておらず、Visual Studio Codeに開発環境を移行してしまっていますので。

    現在のデータベースモデリングツールは、MySQL Workbenchを使っています。と言いながらも、あまりデータベースを最初から設計する機会が少なくなりました。WordPressとか最初からデータベースが用意されている環境を利用する方が多くなっています。

  • XAMPPのバーチャルホストを設定してCakePHPのテストサイトを構築した話し

    CakePHPで開発していて、ローカルのサーバーにテストサイトで動かしたいとき、まともにlocalhost直下に置ければいいのですが、いろいろとプロジェクトを抱えていると、たくさんのテストサイトを同時に動かしたいときがあります。サブディレクトリごとに設定してあげてもいいのですが、これだと.htaccessの設定が面倒であったり、絶対アドレスでリンクを指定できないとか制限があります。

    ドメイン直下にドキュメントルートを配置できればいいのですが、一つ考えられるのはサブドメインを指定するというのがあります。しかし、これではlocalhostでは指定できないととか、わざわざローカルのPCにサブドメインを指定するのもやっかいであるとなります。

    次に考えられるのはポート番号で分けてしまう方法があります。例えば

    • Aプロジェクトは、http://localhost:8080/
    • Bプロジェクトは、http://localhost:8082/

    などでアクセスすることになります。これですと、ポート番号を適当に追加していけばプロジェクトを分けてアクセスすることが可能にになります。

    簡単にローカルのPCにCakePHPのテスト環境を構築するにはXAMPPをインストールしてしまうのが一番簡単です、XAMPPを一つインストールしてしまえば、CakePHPのテスト環境で必要なApacheや、PHP、MySQLも動かすことがことができます。

    ポート番号で分けてCakePHPの環境で動かすには、Apacheのhttpd.confにバーチャルホストの設定を追加してしまいます(ここからが本題)。上記のAプロジェクトの場合はApacheのhttpd.confに以下のバーチャルホストの設定を追加します。

    Listen 8080
    
    DocumentRoot C:/workspace/TestProject/app/webroot
    DirectoryIndex index.html index.php
    ServerName localhost
    
    <Directory C:/workspace/TestProject/app/webroot>
    Options Indexes FollowSymLinks MultiViews Includes ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
    </Directory>

    この場合、ダウンロードしたCakePHPは、c:\workspace\TestProjectにコピーしてしますと(EclipseのPDTで開発しているためこんなディレクトリにプロジェクトを入れています)、ドキュメントルートはその下の\app\webrootになります。プロジェクトを増やす場合は、赤字の部分を変更すればいいでしょう。

    Optionsは、適当に動作させる環境に合わせて設定してください。これは、テスト環境を自分のローカルPC以外からアクセスできないようにしたり、ましてインターネットからアクセスできないようにしたり(もちろん当たり前ですが)してしまえば、あまり気にしなくてもよいかもしれません。

    以上、いつもhttpd.confの設定でつまずく覚え書きです。

    著:山田祥寛
    ¥1,870 (2025/11/25 12:18時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/11/28 14:13時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/11/25 12:18時点 | Amazon調べ)

    追記

    せっかくこの記事にたどり着いて読んでくれたところ申し訳ありませんが、現在(2014/04/28)のところ、この方法は使っていません。今はVirtual Box+Vagrant+Chefでローカルのテストサイトを構築しています。

    追記2

    またまた、上記の追記のVirtual Box+Vagrant+Chefはもう使っていません。現在は、Dockerでテストサイトを実現しています。その方が簡単です。

  • Thunderbird3 RC版のショートカットが効かない話し

    一点だけThuderbird3の違和感。よく使うキーボードのショートカットが使えない。

    フォルダ内のメールをすべて読んだことにするCtrl+Shift+C。このショートカットはよく使います。サポートページを見ると、まだこのショートカットはあることになっています。

    現在、メールのダウンロードとかインデックスの作成をしているので、それが原因でショートカットが使えないとか・・・。

    続きはこちらから

  • 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がバージョンアップしてくれることに期待します。

  • Bluetoothのイヤフォン

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

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

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

  • 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の分だけ正しくライセンスを購入しましょう。

  • 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がプリンタサーバー経由で印刷できるだけましか。

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

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny