世の中猫も杓子もスマートフォンのような風潮ですが、アクセス解析を見るかぎりではまだまだ携帯電話(いわゆるガラケー)が圧倒的に優勢です。サイトを作る際にも携帯電話を無視するわけにはいかないので、携帯用にもページを作ります。携帯用のページを切り替えるようにしているのですが・・・。困ったこと困ったことがいくつか出てきました。今回のケースでやりたいことを書いておきます。QRコードのページへリダイレクトする。携帯電話からのアクセスだったら、コンテンツを表示する。検索エンジンからも利用者を誘導する。振り分け、QRコード作成&リダイレクト、検索エンジンへの登録、を行ないました。PCでアクセスすると、期待通りQRコードのページへとリダイレクトされ、そのQRを使って携帯電話で目的のページにアクセスできました。携帯電話で、URLを入れてアクセスすると、これも期待通り目的のページが表示されました。ところが、検索すると思った通りになりません。検索結果の中身が、リダイレクト先(QRコード表示用ページ)になっていました。これでは中身に何を書いても検索キーワードに反映されません。(勝手に)携帯電話用に変換してしまう。下の方にある「ページを直接表示する」で、目的のページを表示できるものの、そんなことをしてくれる一般ユーザはまずいないだろう。問題点1つ目の問題点は「検索エンジンが(目的のページではなく)リダイレクト先のページをクロールしている」こと。2つ目は「元々携帯電話用に作ったページなのに、GoogleやYahooが携帯電話ように変換してしまう」こと。これは携帯用のページだ!2つ目はわりとあっさりと解決。説明があったので、コレの通りにしました。この指定は(同じエンジンを使っているから当然ですが)Yahooにも効果がありました。要素を使っていたのですが、どうやら検索エンジンはこの要素をたどってくれるらしい。ほとんどの場合はその方が好都合なのですが、今回のケースでは余計なお世話。リダイレクトするようにしました。以上の対策で、目的が達成できました。天狗大臣とあるお客様からの相談で、「(Webサイトの)画像をクリックしたら、声が流れるようにしたいけど、できるものですかね?」という案件をいただいていました。その当時は、私たちとは別の業者さんがサイト管理をされていたので、あまり深入りせずに「できますよ。今は私がサイトを触るわけにはいかないので、声の録音方法と、業者さんに送る方法を教えますね」程度の対応に留めておきました。数日後、件のお客様から「お陰さまでできました」と連絡があり、そのページを見せてもらいました。画像をクリックすると、別ページに遷移して殺風景なプレイヤーが表示されて声が流れ始めました。ファイルのダウンロード速度もやや気になる。タグでリンクを張っているだけでした。HTML5対応のブラウザならば内蔵プレイヤーで、そうでなければプラグインのプレイヤーで再生されるわけです。うーん、確かに「画像をクリックしたら声が流れる」という要求はクリアしているし、お客さんも文句はないみたいだけど・・・。本当にこれでいいのか?今回の要求の意図しているところって、「見ている人が画像(サイト主の顔のイラスト)をクリックしてみたら、声が出てきてびっくり」みたいな遊び心&いたずら心なんじゃないかと思うのですよ。少なくとも、私はそう受け取りました。それが、ページは遷移しちゃう(声の主のイラストが見えなくなる)わ戻るボタンを押さなきゃいけないわでは、仕掛けの魅力が半減ですよ。天狗大臣ある案件で、Excelシートを全自動で作る必要が出ました。その程度はVBAで解決・・・、と思ったら、条件付き書式に指定した式がずれてしまう・・・。初めは凡ミスかと思ってコードを確認しても、おかしな点は見当たらない。ネットで調べてみたら、マイクロソフト公認のExcelのバグでした。指定する選択したセル以外に条件付き書式を指定するというもの。詳細はマイクロソフトのページをみてください。今回の案件では、上の3つはどうしても回避できない項目でした。(マイクロソフトのページでは、「VBA使うな」とか「絶対参照で書け」なんて回避方法が紹介されてました)でも、最後の「選択したセル以外に~」という項目は回避できます。要は、「条件付き書式を指定したいセルを選択しておけばOK」ということです。実際、そのようにコードを組んだら、あっさりと解決しました。ちなみに、マイクロソフトのページにあったコードを、この方法で回避するとこうなります。Sub2,6,7,15行目が、Excelのバグを回避のために追加した行です。(ひっそりと)停止してしまうのが玉にキズです。そんな時の対処方法です。行う必要があったので、使ってみました。簡単に使えて便利なのですが、ファイル更新時刻を取得/設定できなかったので、それ用の関数を追加しました。変更箇所SharpSshはソースも公開されているので、簡単に機能追加ができます。ブロックの中に以下のコードを追加しました。ライブラリのソース内では、SFTPの(たぶん)全ての機能を使えるように実装されているのですが、外部に公開されている関数がごく一部なのです。今回組んだのは機能を外部に提供する部分だけです。使用上の注意この機能(リモートファイルの更新時刻を取得/設定)を使いたかったのは、ローカルファイルのそれと比較してどちらか新しい方を残す、ということをしたかったのです。型で、今回作ったGetMTime()関数とは異なる形式です。片やGetMTime()の戻り値はUNIX形式。UNIX形式に変換する関数を作りました。日本時間なので9時です。ToFileTime()関数でlong型にしたもの。1601年から1970年までを、100ns単位で表したものです。目的のUNIX形式になる、というわけです。他にも他のSFTPの機能も簡単に実装できるので、そのうち作りたいと思います。天狗大臣3週間ほど前に海外からの攻撃を受けていたサーバ。最近は順調に動いています。それでも「定期的にログは見よう」と思っていたのに、気がつくと3週間経っていました。天狗大臣HTMLエスケープWordPressでもHTMLベタ書きでも、タグの説明のためにタグを書きたい時には困ります。普通にタグを書くと、表示されずにタグとして働いてしまうのですから。今日は、タグをそのまま表示する方法を紹介します。金曜の昼に、お客様から「メールがなかなか届かない」という第一報が入りました。いうメーリングリストシステムを使っています。試しに会員登録をしてみたが、仮登録メールがなかなか届かないとのこと。いろいろなサービスを動かしているので、問題が複雑に見えてしまいました。原因が分かった今となっては、「なんであの時気がつかなかったのか!」と思うことばかりですが、臥薪嘗胆の意味を込めて、恥を公開しておきます。投稿」に日付を入れる方法を紹介しました。同じ悩みを持つ方が多かったようで、けっこうなアクセス数がありました。ウィジェットを作ってみます。親兄弟ページへのリンクやりたいことを大雑把に書くと、「現在表示中のページの、親ページと兄弟(姉妹?)ページを表示する」ということです。スクリプトを修正しました。昨日の記事で紹介した、”Subversionのリポジトリをsvnsyncコマンド使ってミラーリングする”方法の追記です。昨日は簡単に書くと、本家リポジトリのコミット完了後に分家リポジトリにsvnsyncを発行する、というところまでやりました。する、という処理を加えましょう。