右メニューに本棚ブログパーツを配置していました。自分で購入した本を並べてみます。
今回導入したのは、メディアメーカーのパーツです。書籍データベースはアマゾンを利用しているようです。
書籍の登録も、ブックマークレット機能ツールをインストールすれば、アマゾンのページでマウスの左ボタンで登録できるので簡単です。ただ細かいところで行き届かないのがありますが、あとは問題なし。
たまに、同じ本を2冊買ってしまうこともあるので、これで防げるか? しかし、登録がいつまで続けられるのが問題か。

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。
右メニューに本棚ブログパーツを配置していました。自分で購入した本を並べてみます。
今回導入したのは、メディアメーカーのパーツです。書籍データベースはアマゾンを利用しているようです。
書籍の登録も、ブックマークレット機能ツールをインストールすれば、アマゾンのページでマウスの左ボタンで登録できるので簡単です。ただ細かいところで行き届かないのがありますが、あとは問題なし。
たまに、同じ本を2冊買ってしまうこともあるので、これで防げるか? しかし、登録がいつまで続けられるのが問題か。

今日を逃すと雨ということで、チビと河川敷をサイクリング。目的地は新横浜公園。
チビが行く条件として、マクドナルドでハンバーガーを食べたいということなので、新横浜まで自転車で行きハンバーガーを買って、公園まで走りました。
到着して早速袋を開けてみると、ダブルクォーターパウンダー・チーズのパッケージから出てきたのは、クォーターパウンダー・チーズでした。パテが一枚。
戻る訳にもいけないので、お店に電話。店長さんが出てきて、説明したところ、お店に行って名前を出せば、新しいダブルといただけるとのこと。しかし、わざわざそれだけで行く訳にもいかないので、そのままにしておくことにしておきます。
帰ってからツレに言ったら、マクドナルドの商品の入れ間違えは、知り合いのお母さんたちによると、たまによくあることのようです。中身を確認しなければダメのようです。

デジタルカメラで撮った画像ファイルのインポートは、アドビのLightroomで行っています。画像の編集、印刷は、簡単なのでGoogleのPicasaを使っています。本当ならLighroomかPicasaのどちらか片方を使えばいいのですが、そうはいきません。
Lightroomのインポートは、画像のデータから自動的に日付別にディレクトリを作ってくれます。これはPicasaですとできません。ファイルのアップは、Picasaだと簡単です。Lighroomですと一度ファイルをエクスポートしなければいけません。
Piacasaが日付別のインポートがサポートしてくれれば解決するのですが、本当は知らないだけだったりして・・・。

前に在籍した会社の10周年の設立記念パティーにお呼ばれして行ってきました。
設立した日に採用になって、1年半ほど在籍しました。仕事はシステム全体の責任者。システム部部長という肩書きがありましたが、部下は0人。関係会社と一緒にシステムを構築していくというのが業務でした。
会社のそのときの大きな目標は設立1年で上場すること。設立当時はITバブルのころでしたが、これはとても大きなハードルでした。結果的には13ヶ月で上場できました。
同時にサービスも、ほとんど1から作っていくという大変な仕事でした。300万件のデータをBtoBでサービスするとか、出始めの携帯電話サイトとか、着メロサイトとか。初めてWebでのサービスを開発するなど、やったこともないシステムを作っていくという、いい経験をさせてくれました。このときの経験が、今の仕事の元になっています。
1年半ほどですが、とても中身の濃い時間でした。まわりからは、私はもっといたようなことを言われました。とても私自身の印象が強かったようです。
昔話に花を咲かせましたが、結局は過去のことなのですね。寂しいことでもありますが、今の現実に目を向けなければいけません。
しかし、辞めた人間を呼んでいただけるなんて、ありがたいことです。私がいたことに比べると、とてもよい会社になっていました。これからの末永くお付き合いください。
VMware Serverを動かしているDellサーバーがとても調子悪い。32bitのLinuxを新しく仮想サーバーにインストールしなくてはいけないので、何とかしなければいけない。
まずはVMWareのコンソールに接続できない。見てみるといろいろなライブラリがないといわれる。しかたないので、再インストール。
ホストのほうは、iSCSIのディスクにあるので、VMWare Serverが動いているところを再インストールすればいいが、とっても面倒な作業。
その前に以前DELLから送られてきたSATAのパッチを当てなければいけない。説明によると、シーゲートのSATAハードディスクが起動したときに認識できなくなるという障害のパッチらしい。ずっと放っておいた。
パッチを当てて、OSの再インストールで明け方までかかって、今はとても眠いです。
ようやくIISのSSL証明書の更新をおこなった。IIS5.0の場合、そのままサイトに対してSSLサーバー証明書の更新ができないため、作業手順に注意が必要です。
毎年1回だけの作業なので、やり方が忘れてしまいます。失敗すると、また証明書の発行からやり直さないといけないので失敗はできません。
IIS5.0の場合、本番のサイトとは別にSSL更新用のサイトを作って、このサイトでCSRファイルを生成します。CSRを証明書発行会社に送って、証明書を発行してもらいます。この間、SSL更新用のサイトを削除してはいけません。削除すると証明書をインストールできなくなります。
発行された証明書をSSL更新用のサイトにインストールします。最後に本番サイトにSSL更新用のサイトから証明書を置き換えて完了です。
何でこんな面倒な手順なのかは、Microsoftに聞いてください。聞いても答えてはくれないでしょう。

引き続きCakePHPの話し。覚え書きです。
検索結果をリストにして、このリストをページ替えしたり、ある項目でソートしたりしたいということはよくあります。CakePHPではページング処理は、コントローラーでpaginate()に検索条件を与えてあげるだけで実現できます。
しかし、ソートしたり次へリンクを押してページ替えすると、検索条件を忘れてしまうのです。検索条件の引き継ぎはここでも書きましたが、getパラメータの処理を書いてあげなくてはなりません。セレクトメニューや、ラジオボタンは、検索項目に1つにつき1つの値しかありませんのでいいのですが、チェックボックスは複数の値がありますので、すべての項目をパラメータにするのはURLが長くなってしまいます。
最初は、チェックボックスの項目を配列に格納し、シリアライズ化してGETパラメーターに置いてみましたが、GETパラメーターを解析するpassedArgs()がうまく解析してくれませんでした。
そこで、チェックボックスをグループにして、この値をコンマ区切りに変換してからパラメーターに渡してしまいます。しかし、最初に検索条件を入力するページはPUTで各項目が配列で渡してきますので、検索条件を生成する処理を共通にするために、GETで来たパラメータはPUTで来たパラメータに合わせるように、コンマ区切りからPUTパラメーターの配列に変換してあげます。
こんなことをしてあげないと、複数の値を持ったチェックボックスでの検索結果がpaginate()で処理できないのは、CakePHPでの面倒なところです。
PS. 以上の内容を読んでみると、理解できなさそうですね。自分が理解できるだけのメモ書きですね。該当するソースを公開して説明できればいいのですが・・・。
昨日のCakePHPでhasManyでの検索の続きです。うまくいったと思いましたが、検索結果に重複項目があります。hasManyのモデルにまともにSQLを実行したら重複するのは当たり前ですね。
そこで、pagenate()でページングの処理をしているので、コントローラーのメンバー$pagenateのfieldsに、キーとなる項目にDISTINCTを付けてみる。これで、重複されなくなった。
しかし、新たな問題。検索個数が合わない。こちらもcount(*)になっているところをcount(DISTINCT キー項目)にすればいいのだけど、$pagenateのfieldsからは影響されないようでした。
いろいろ調べてみると、やはりありました。ここです。モデルにpaginateCount()を定義してあげればいいのでした。pagenate()のソースを見ると、モデルにpaginateCount()があるかどうかをチェックして、あればpaginateCount()を実行してくれます。無ければfindCount()を実行します。ここはSQLをゴリゴリ書いて、該当する条件でレコード数を返してあげるようにしました。配列に格納されている条件は次のようにWHERE句に変換できます。
$Db = ConnectionManager::getDataSource($this->useDbConfig);
$where = $Db->conditions($conditions);これで、重複せずに検索結果を表示できました。
いまいち具体的な説明ではないので、もしご興味ある方はコメントに入れてください。
ただ今、CakePHPでWebサイトを開発しています。今回は、検索条件を設定して抽出して結果をリストにするという、定型的な検索サイトです。
あるモデルに対して検索条件を与えるのは普通です。CakePHPの場合、belongsToのような外部参照の関係であるモデルにも検索条件を与えても、簡単に抽出してくれます。
しかし、hasManyの関係にあるモデルの項目に検索条件を書いてあげるとSQLを発行しているところでエラーになります。SQLのデバックログによると、hasManyのモデルに対しては、SQLでleft joinを作ってくれません。これで、未定義のテーブルということでSQLエラーになります。
Googleで検索してみると、このように書けばOKと書いている。しかし、これではhasMany以外の関係のモデルを検索してから、hasManyのモデルにフィルターをかけているだけなので、検索結果が違ってくる。
無理矢理SQLを生成してみることもやりましたが、ビューに渡す結果を生成するのが大変なので止めました。
いろいろと調べてみると、ここにありました。後からhasManyのモデルに対してjoinを設定すればいいのです。モデルに対して、beforeFind()を定義してあげることが必要でした。CakePHPのソースを追ってみると、findAllのところでオプションにjoinが使えるように定義されていました。これで無事にhasManyのモデルでも条件式を書くことができました。
すべてのサイトに感謝です。
spamメールが頻繁に届く件。2週間かかってレンタルサーバー会社から回答がありました。遅すぎる!
最初のメールは、
弊社にて、スパムメールが増えるように設定等は行っておりません。恐れ入りますが、スパム対策などをお客様側で行っていただくよう 何卒よろしくお願いいたします。ご確認いただけましたら幸いです。
とのこと。メールサーバーの機能にスパムメールの対策があると明示されているし、以前同じ障害があって連絡したら対応してくれたので、再度問い合わせしました。
すると、
現在も引き続きspamが多く転送されておりますでしょうか。
調査の結果、cpanelの一部バージョンとspamassassinの設定の問題で、spamが正しく判定されていない状態があったようです。
現在は正常にspamの遮断を行っていると思われます。
spam検出ツールのspamsassassinはオープンソースで提供されており、特に海外のspamには強いのですが日本語のメールでは誤判定率が高く、正常なメールまで削除されることを防ぐため比較的spamが通りやすい傾向になっております。
誠に申し訳ございませんが、可能であるならばお客様のクライアント側でのspam対策も併せて行っていただくことをお勧め致します。
との回答がすぐにありました。つまり、やはりspamフィルターの設定の問題であったようです。今回のクレームは2点です。
spamassassinのフィルターの機能が低いのは諦めて、Thunderbirdのフィルター機能と地道に手作業で振り分けますが、最初の回答はいかがなものでしょう。