5丁目通信(仮称)

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

カテゴリー: 覚え書き

作業した際の覚え書き。

  • HTMLの特殊文字はまじめに書きましょう、という話し

    現在開発中のWebサイトはCakePHPで開発しています。今回は、PCと携帯電話の両方をサポートしています。どちらもコントローラーとアクションは共通でビューだけが異なります。携帯かどうかの判定をして、携帯電話であったらm_*.ctpという名前のビューを取り込むようにしています。

    携帯電話の場合の文字コードは、基本的にシフトJISになります。通常はPHP、HTML、DBはUTF-8にしていますので、表示するときに強制的にシフトJISに文字コードを変換して、英数字カタカナを1バイト文字に変換してしまいます。この辺りはレイアウトに処理を書いておけばCakePHPだと簡単です。

    ここから本題です。失敗したこと。

    携帯電話の画面で矢印の代わりに<と>を使っていました。<>は2バイトコードです。例えば

    <前へ 後ろへ>

    のようにリンクを設定します。

    しかし、お察しのとおり携帯電話のブラウザだとおかしなコードが表示されてしまいます。つまり<>がHTMLタグの始まりと終わりになって認識されてしまいます。

    解決方法は簡単です。面倒がらずにHTMLの特殊文字でまじめに指定することです。<は<>は>です。これで正しく表示できます。

    やはり基本は大事です。

    技術評論社
    ¥1,980 (2025/04/04 17:07時点 | Amazon調べ)
  • Google リーダーで画像がどうしても表示できないとき

    Firefox + Google リーダー + Greasemonkey + Google Reader Full Feed + RefControl で快適にサイトを読めるということを書きましたが、中にはどうしても画像が読み込めないサイトがあります。

    例えば、blog.goo.ne.jpとかwebry.info(このサービスはどこ?)とか。

    試しにRefControl のオプション設定で、動作を「偽装」にすれば上記の2つのサイトは正常に画像が表示するようになった。

  • jQueryのrollovers.jsとprototype.jsの競合の話し

    現在、外部の会社から出てきたHTMLのコードにCakePHPのAjaxの処理を埋め込むと、メニューの画像がロールオーバーしなくなります。

    HTMLを見てみると、rollovers.jsというJavascriptでロールオーバーをしているようです。prototype.jsを読み込むところを削除すると、うまくロールオーバーしてくれます。しかし、Ajaxの処理はしてくれなくなります。

    CakePHPでAjaxを実装すると、prototype.jsが必要です。CakePHPの機能を使わずにAjaxの処理を書くのはとても面倒です。では、rollovers.jsを取るか、CakePHPのAjaxを取るかをどちらかにするかと言われればCakePHPのAjaxをとりました。

    もっとシンプルにJavascriptでロールオーバーできないかと探したところ、ありました。シンプルロールオーバー。

    メニューの画像ファイルの命名が

    *_o.gif //ロールオーバー前
    *_h.gif // ロールオーバー後

    になっていますので、少々修正をするだけでOK。無事にAjaxの処理とメニューのロールオーバーが実現できました。シンプルロールオーバーの作者に感謝です。

    技術評論社
    ¥1,980 (2025/04/04 17:07時点 | Amazon調べ)

    追記(2022年10月16日)

    記事中のシンプルロールオーバーのサイトはどこかになくなりました。

  • Googleリーダーで見えない画像を表示する

    Googleリーダーサイトの巡回は、feedを使ってGoogleリーダーで読んでいます。登録しすぎて、1日100本くらいのfeedを読んでいますが、流し読みで3分くらいで終わります。

    しかし、中にはGoogleリーダーで最初だけしか表示されなかったり、一番ダメダメなのは画像がキチンと表示されないサイトがあります。とくにYahooブログでは、画像がリンク切れになります。Yahoo ブログは応答が遅いという問題がありますが。

    いちいちサイトにアクセスすればいいのですが、これは面倒です。ずっと放っておきましたが、やはり探せばあるものです。詳しくは、ここのページを読んでください。

    これはFirefoxのみの対応ですが、次のアドオンソフトをインストールすればOKです。なぜかここのページからリンクがうまくいっていないので、各ソフトのリンクを載せておきます。

    これで、Googleリーダーだけでブログが読めるようになったので、ますます便利になりました。あと、Ctrl+Zを押しておくと、とても幸せになります。お試しを・・・。

  • IIS5.0のSSLサーバー証明書の更新の話し

    ようやくIISのSSL証明書の更新をおこなった。IIS5.0の場合、そのままサイトに対してSSLサーバー証明書の更新ができないため、作業手順に注意が必要です。

    毎年1回だけの作業なので、やり方が忘れてしまいます。失敗すると、また証明書の発行からやり直さないといけないので失敗はできません。

    IIS5.0の場合、本番のサイトとは別にSSL更新用のサイトを作って、このサイトでCSRファイルを生成します。CSRを証明書発行会社に送って、証明書を発行してもらいます。この間、SSL更新用のサイトを削除してはいけません。削除すると証明書をインストールできなくなります。

    発行された証明書をSSL更新用のサイトにインストールします。最後に本番サイトにSSL更新用のサイトから証明書を置き換えて完了です。

    何でこんな面倒な手順なのかは、Microsoftに聞いてください。聞いても答えてはくれないでしょう。

  • CakePHPでpaginate()での検索結果の引き継ぎの話し

    引き続きCakePHPの話し。覚え書きです。

    検索結果をリストにして、このリストをページ替えしたり、ある項目でソートしたりしたいということはよくあります。CakePHPではページング処理は、コントローラーでpaginate()に検索条件を与えてあげるだけで実現できます。

    しかし、ソートしたり次へリンクを押してページ替えすると、検索条件を忘れてしまうのです。検索条件の引き継ぎはここでも書きましたが、getパラメータの処理を書いてあげなくてはなりません。セレクトメニューや、ラジオボタンは、検索項目に1つにつき1つの値しかありませんのでいいのですが、チェックボックスは複数の値がありますので、すべての項目をパラメータにするのはURLが長くなってしまいます。

    最初は、チェックボックスの項目を配列に格納し、シリアライズ化してGETパラメーターに置いてみましたが、GETパラメーターを解析するpassedArgs()がうまく解析してくれませんでした。

    そこで、チェックボックスをグループにして、この値をコンマ区切りに変換してからパラメーターに渡してしまいます。しかし、最初に検索条件を入力するページはPUTで各項目が配列で渡してきますので、検索条件を生成する処理を共通にするために、GETで来たパラメータはPUTで来たパラメータに合わせるように、コンマ区切りからPUTパラメーターの配列に変換してあげます。

    こんなことをしてあげないと、複数の値を持ったチェックボックスでの検索結果がpaginate()で処理できないのは、CakePHPでの面倒なところです。

    PS. 以上の内容を読んでみると、理解できなさそうですね。自分が理解できるだけのメモ書きですね。該当するソースを公開して説明できればいいのですが・・・。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • 昨日のCakePHPでhasManyでの検索の続きの話し

    昨日の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);

    これで、重複せずに検索結果を表示できました。

    いまいち具体的な説明ではないので、もしご興味ある方はコメントに入れてください。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • 迷惑メールのフィルタが先か、転送が先か?

    Yahooメールの転送を解除して思ったのですが、これだけ迷惑メールを転送してくれるということは、フィルタの処理前にメールは転送しているのでしょう。Gmailの場合、フィルタをかけてからメールを転送してくれるようでしたが、どうだったでしょうか?

    Yahooメールは正常に迷惑メールのフィルタが動いているようです。Yahooメールに届くメールは、ほぼ迷惑メールのようです。3時間で20通来ています。メールアドレス変更してあげたほうが、Yahooのためになる?

  • Yahooメールの転送を停止

    いままで、Yahooメールに来たメールは、自分のアドレスに転送するように設定していた。しかし、Yahooメールに来るメールは、あまりにも迷惑メールが多い。そこで、メールの転送をやめる。

    今までは、使っているレンタルサーバーのメールサーバーの迷惑メールのフィルターがうまく効いてくれたので、そこではじいてくれていたが、最近のメンテナンスからはじいてくれなくなっている。レンタルサーバー会社にはクレームを入れているが音沙汰無し。

    迷惑メールの宛先をみるとYahooメールが多いので、こちらで対応することにする。まずは転送をやめて、Yahooメールの迷惑メールのフィルター機能にがんばってもらおう。Gmailの迷惑メールのフィルター機能は優秀だけど、Yahooメールはどうでしょうか?

    ということで、私にYahooメールでメールを送ってこられても、対応が遅くなりますのでご注意を。といっても、Yahooメールはほとんど使っていないので、問題は無いかと思います。

  • SMTPサーバーが復旧したけどね、という話し

    不調だったSMTPサーバーが1日ぶりに復旧したという連絡が、レンタルサーバー会社からありました。対応が遅い。

    しかし、いまだに迷惑メールが来る。こちらはまだ改善されていない。メールの半分以上、SPAMメールだったということは悲しい。

    続きはこちらから