5丁目通信(仮称)

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

カテゴリー: 覚え書き

作業した際の覚え書き。

  • Google AppsのスタートページにGmailコンテンツが表示できなくなった。

    普段、Webブラウザのホームページは、Google Appsのスタートページにしています。スタートページに、Remember the milk、Gmail、Googleカレンダーのコンテンツを配置しています。

    最近、Gmailコンテンツでメールサブジェクト一覧が表示しなくなりました。原因は、Gmailの設定で「接続方法」を「常に https を使用する」したためです。こちらを「https の使用を選択制にする」にすればいいのですが、GoogleAppsは「https の使用を選択制にする」は選択できなくなっています。

    使っているGmailコンテンツはGoogle純正(?)ですので諦めていましたが、ふと他のGmailコンテンツを試すことにしました。いくつかインストールしてみると、うまく行くコンテンツがありました。インストールページをリンクしようとしましたが、GoogleAppsの内部のリンクになりますのでできませんが、「Gmail Gadget」でコンテンツを探してみればよろしいかと。

    これでGoogleAppsトップページでメールを確認できます。

  • XAMPPでpearをセットアップしようとするとエラーになる話し

    XAMPPをインストールしているPCに、pear経由でphpDocumentorをインストールしようと、まずはpearをセットアップする。go-pear.batを実行すると、

    ERROR:manifest length read was "3562676" should be "678716787"

    とエラーが出る。これはXAMPPでの周知の障害らしい。例えばここでも報告されている。

    http://pear.php.net/go-pear.pharからgo-pear.pharをダウンロードして書き換えればいい。

    以上、覚え書き。

    著:山田祥寛
    ¥1,870 (2025/04/10 16:26時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥1,430 (2025/04/10 16:26時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/10 16:27時点 | Amazon調べ)
  • データベースモデリングツール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/04/08 11:39時点 | 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/04/10 16:26時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥1,430 (2025/04/10 16:26時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/10 16:27時点 | Amazon調べ)

    追記

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

    追記2

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

  • 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

    にしてくれます。

  • 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 Professionalを買って帰りました。

    早速、インストールです。もちろん64ビットです。せっかくメモリが4GBありますので。

    Windows7のRCが入っている領域にインストールします。今回は新規インストールです。

    XPのことは何も聞かれません。問題なくあっさりインストール完了です。何もトラブルがないのは逆に怖いです。

    アプリケーションは、

    をインストールしました。アンチウイルスソフトは、今回初めて

    を入れました。データはすべて共有あるいは分散していますので、データの移行はしなくていいから、とても簡単です。以上、2時間くらいの作業です。

    マイクロソフト
    ¥14,700 (2025/04/07 13:52時点 | Amazon調べ)
    マイクロソフト
    ¥21,290 (2025/04/05 09:14時点 | Amazon調べ)

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

  • Eclipse-PDTを上書きインストールしたらプラグインが無効になる話し

    先ほどの記事のように、Eclipse-PDTを上書きインストールしたらプラグインが無効になってしまった。

    とりあえずの必須のプラグインは、

    の2つ。再インストールしようにも、うまくいかない。

    Clay Database Modelingは2.0になっていて、旧バージョンのアップデートサイトがクローズされている。旧バージョンのライセンスは購入しているが、開発元のアズーリによると、旧バージョンは新しいバージョンにアップデートしろとのこと。しかし、旧バージョンからのバージョンアップはなし。しかもライセンス料は80,000円也。機能とコストが全く見合わないのでアップデートはやめておく。別のデータベースモデリングのプラグインを探さなければいけない。

    プラグインを有効にどうしてもできないので、しかたないので再インストールをしなければいけない。なにげにアップデートしたら、こんな羽目になった。残念。

    著:山田祥寛
    ¥1,870 (2025/04/10 16:26時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥1,430 (2025/04/10 16:26時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/10 16:27時点 | Amazon調べ)
  • Eclipse-PDTをアップデートしたらエラーになる話し

    Eclipse-PDTを「Help」ー「Check for Updates」からアップデートしたら、”An error occurred.・・・”とエラーで起動できなくなってしまった。

    eclipse.iniを書き換えたり、削除したりしてもダメだった。あとjavaをアップデートしても起動できない。

    最後の手段で最新のEclipse-PDTを上書きインストールしたら、何事もなく起動できた。そんなものか・・・。

    続きはこちらから

    著:山田祥寛
    ¥1,870 (2025/04/10 16:26時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥1,430 (2025/04/10 16:26時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/10 16:27時点 | Amazon調べ)
  • CakePHPでデータベースの文字コードの話し

    今開発しているWebサイトは、別の開発会社が別の機能を開発している。時間の関係で私がすべて開発できないので、発注元が別の開発会社を割り当てている。

    その会社からの質問。

    本番サーバーのDBにアクセスしたら文字コードの関係でデータが抽出できない。

    そういえば、本番サーバーはTurboLinuxで文字コードがEUCだっけ。インストールされているPostgreSQLも7.x系で、テストサーバーとは違っていたような。テストサーバーは8.x。この辺りは自分がサーバーの面倒を見ている訳ではないから伝えていなかった。失敗。

    PostgreSQL上にUTF-8でデータベースをcreatedbで作成しておいて、UTF-8でダンプしたSQLでリストアしておいた。システムの想定する文字コードはUTF-8。この辺りが怪しそうなので連絡しておいた。

    私はCakePHPで開発していて、別の開発会社はperlのCGIで開発。CakePHPの経験がないので、perlのCGIになったようだ。

    こちらは全く文字コードの意識はしていない。なにかうまく動いている。結果オーライ。apps/config/database.phpでencodingの設定もしていない。データベースが絡んだ案件は、必ず最初に文字コードでトラブルが起こる。

    後から、私は非協力的だと開発会社から言われるのでしょうね。psqlコマンドで一発でわかりそうなものだが、そういえば発注元はその開発会社に、サーバーにシェルでアクセスさせる権限が与えていないかも・・・。