カテゴリ

    Category Order could not understand your category HTML. Please do the following:

    • Disable all plugins except for category order to see if some other plugin is causing the problem. If the problem goes away, re-enable each plugin until you find the incompatible one.
    • Try switching to a different theme, like the WordPress default theme.

    Once you have tried the above steps, email david@coppit.org with the results of these debugging steps. Also include the following information:

    Original HTML:
    <li class="cat-item cat-item-5"><a href="https://www.itpk.jp/?cat=5" title="ITPKからのお知らせ記事です。">お知らせ</a> (3)
    </li>
    <li class="cat-item cat-item-28"><a href="https://www.itpk.jp/?cat=28" title="ITPK のメンバーが、どんなことを考えて仕事をしているのか、を知ってもらえれば幸いです。
    ">こんなこと考えてます</a> (3)
    </li>
    <li class="cat-item cat-item-29"><a href="https://www.itpk.jp/?cat=29" >フリー画像</a> (5)
    </li>
    <li class="cat-item cat-item-6 current-cat-parent current-cat-ancestor"><a href="https://www.itpk.jp/?cat=6" title="社内向けの研修資料を、業務に支障の内程度に公開します。">研修資料</a> (47)
    <ul class='children'>
    <li class="cat-item cat-item-19 current-cat"><a href="https://www.itpk.jp/?cat=19" >Tips</a> (26)
    </li>
    <li class="cat-item cat-item-7"><a href="https://www.itpk.jp/?cat=7" title="社内向けのWordPress研修資料を公開します。">WordPress研修</a> (12)
    </li>
    <li class="cat-item cat-item-25"><a href="https://www.itpk.jp/?cat=25" >技術解説</a> (9)
    </li>
    </ul>
    </li>
    <li class="cat-item cat-item-3"><a href="https://www.itpk.jp/?cat=3" title="ITPKで提供している製品とご支援させていただいた一部のお客様の紹介記事です。。">製品紹介と製作実績</a> (33)
    <ul class='children'>
    <li class="cat-item cat-item-33"><a href="https://www.itpk.jp/?cat=33" title="携帯電話を使ったスタンプラリーツールです">スタンプラリーツール(いちご)</a> (1)
    </li>
    <li class="cat-item cat-item-12"><a href="https://www.itpk.jp/?cat=12" >バックアップツール(MoodyBlues)</a> (5)
    </li>
    <li class="cat-item cat-item-8"><a href="https://www.itpk.jp/?cat=8" >作業効率化ツール(Redmine)</a> (6)
    </li>
    <li class="cat-item cat-item-35"><a href="https://www.itpk.jp/?cat=35" >印刷物・イベントグッズ</a> (2)
    </li>
    <li class="cat-item cat-item-4"><a href="https://www.itpk.jp/?cat=4" title="ご支援させていただいた一部のお客様の紹介記事です。">製作実績</a> (15)
    </li>
    <li class="cat-item cat-item-34"><a href="https://www.itpk.jp/?cat=34" title="メールを活用した集客支援ツールです">集客支援ツール(KitCom)</a> (3)
    </li>
    </ul>
    </li>
    <li class="cat-item cat-item-24"><a href="https://www.itpk.jp/?cat=24" >雑記</a> (45)
    </li>

    Processed HTML:
    <li class="cat-item cat-item-5"><a href="https://www.itpk.jp/?cat=5" title="ITPKからのお知らせ記事です。">お知らせ</a> (3)
    </li>
    <li class="cat-item cat-item-28"><a href="https://www.itpk.jp/?cat=28" title="ITPK のメンバーが、どんなことを考えて仕事をしているのか、を知ってもらえれば幸いです。
    ">こんなこと考えてます</a> (3)
    </li>
    <li class="cat-item cat-item-29"><a href="https://www.itpk.jp/?cat=29" >フリー画像</a> (5)
    </li>
    <li class="cat-item cat-item-6 current-cat-parent current-cat-ancestor"><a href="https://www.itpk.jp/?cat=6" title="社内向けの研修資料を、業務に支障の内程度に公開します。">研修資料</a> (47)

    <li class="cat-item cat-item-19 current-cat"><a href="https://www.itpk.jp/?cat=19" >Tips</a> (26)
    </li>
    <li class="cat-item cat-item-7"><a href="https://www.itpk.jp/?cat=7" title="社内向けのWordPress研修資料を公開します。">WordPress研修</a> (12)
    </li>
    <li class="cat-item cat-item-25"><a href="https://www.itpk.jp/?cat=25" >技術解説</a> (9)
    </li>

    <li class="cat-item cat-item-3"><a href="https://www.itpk.jp/?cat=3" title="ITPKで提供している製品とご支援させていただいた一部のお客様の紹介記事です。。">製品紹介と製作実績</a> (33)

    <li class="cat-item cat-item-33"><a href="https://www.itpk.jp/?cat=33" title="携帯電話を使ったスタンプラリーツールです">スタンプラリーツール(いちご)</a> (1)
    </li>
    <li class="cat-item cat-item-12"><a href="https://www.itpk.jp/?cat=12" >バックアップツール(MoodyBlues)</a> (5)
    </li>
    <li class="cat-item cat-item-8"><a href="https://www.itpk.jp/?cat=8" >作業効率化ツール(Redmine)</a> (6)
    </li>
    <li class="cat-item cat-item-35"><a href="https://www.itpk.jp/?cat=35" >印刷物・イベントグッズ</a> (2)
    </li>
    <li class="cat-item cat-item-4"><a href="https://www.itpk.jp/?cat=4" title="ご支援させていただいた一部のお客様の紹介記事です。">製作実績</a> (15)
    </li>
    <li class="cat-item cat-item-34"><a href="https://www.itpk.jp/?cat=34" title="メールを活用した集客支援ツールです">集客支援ツール(KitCom)</a> (3)
    </li>

    <li class="cat-item cat-item-24"><a href="https://www.itpk.jp/?cat=24" >雑記</a> (45)
    </li>

    Category pattern:
    /http\:\/\/www\.itpk\.jp\/\?cat\=(\d+)/

    Items:
    Array
    (
        [0] => <li class="cat-item cat-item-5"><a href="https://www.itpk.jp/?cat=5" title="ITPKからのお知らせ記事です。">お知らせ</a> (3) </li>
        [1] => <li class="cat-item cat-item-28"><a href="https://www.itpk.jp/?cat=28" title="ITPK のメンバーが、どんなことを考えて仕事をしているのか、を知ってもらえれば幸いです。 ">こんなこと考えてます</a> (3) </li>
        [2] => <li class="cat-item cat-item-29"><a href="https://www.itpk.jp/?cat=29" >フリー画像</a> (5) </li>
        [3] => <li class="cat-item cat-item-6 current-cat-parent current-cat-ancestor"><a href="https://www.itpk.jp/?cat=6" title="社内向けの研修資料を、業務に支障の内程度に公開します。">研修資料</a> (47)</li>
        [4] => <li class="cat-item cat-item-19 current-cat"><a href="https://www.itpk.jp/?cat=19" >Tips</a> (26) </li>
        [5] => <li class="cat-item cat-item-7"><a href="https://www.itpk.jp/?cat=7" title="社内向けのWordPress研修資料を公開します。">WordPress研修</a> (12) </li>
        [6] => <li class="cat-item cat-item-25"><a href="https://www.itpk.jp/?cat=25" >技術解説</a> (9) </li>
        [7] => <li class="cat-item cat-item-3"><a href="https://www.itpk.jp/?cat=3" title="ITPKで提供している製品とご支援させていただいた一部のお客様の紹介記事です。。">製品紹介と製作実績</a> (33)</li>
        [8] => <li class="cat-item cat-item-33"><a href="https://www.itpk.jp/?cat=33" title="携帯電話を使ったスタンプラリーツールです">スタンプラリーツール(いちご)</a> (1) </li>
        [9] => <li class="cat-item cat-item-12"><a href="https://www.itpk.jp/?cat=12" >バックアップツール(MoodyBlues)</a> (5) </li>
        [10] => <li class="cat-item cat-item-8"><a href="https://www.itpk.jp/?cat=8" >作業効率化ツール(Redmine)</a> (6) </li>
        [11] => <li class="cat-item cat-item-35"><a href="https://www.itpk.jp/?cat=35" >印刷物・イベントグッズ</a> (2) </li>
        [12] => <li class="cat-item cat-item-4"><a href="https://www.itpk.jp/?cat=4" title="ご支援させていただいた一部のお客様の紹介記事です。">製作実績</a> (15) </li>
        [13] => <li class="cat-item cat-item-34"><a href="https://www.itpk.jp/?cat=34" title="メールを活用した集客支援ツールです">集客支援ツール(KitCom)</a> (3) </li>
        [14] => <li class="cat-item cat-item-24"><a href="https://www.itpk.jp/?cat=24" >雑記</a> (45) </li>
    )

  • お知らせ (3)
  • こんなこと考えてます (3)
  • フリー画像 (5)
  • 研修資料 (47)
  • 製品紹介と製作実績 (33)
  • 雑記 (45)
月別アーカイブ
検索

‘Tips’ カテゴリの記事

世の中猫も杓子もスマートフォンのような風潮ですが、アクセス解析を見るかぎりではまだまだ携帯電話(いわゆるガラケー)が圧倒的に優勢です。

当然、サイトを作る際にも携帯電話を無視するわけにはいかないので、携帯用にもページを作ります。

HTTPリクエストの UserAgent を見て PC 用のページと 携帯用のページを切り替えるようにしているのですが・・・。

困ったこと

困ったことがいくつか出てきました。まずは、今回のケースでやりたいことを書いておきます。

  • 携帯電話専用ページにしたいので、PCからアクセスがあったら QRコードのページへリダイレクトする。
  • 携帯電話からのアクセスだったら、コンテンツを表示する。
  • 検索エンジンからも利用者を誘導する。

これらのために、携帯 or PC での振り分け、QRコード作成&リダイレクト、検索エンジンへの登録、を行ないました。

PCでアクセスすると、期待通りQRコードのページへとリダイレクトされ、そのQRを使って携帯電話で目的のページにアクセスできました。

携帯電話で、URLを入れてアクセスすると、これも期待通り目的のページが表示されました。

ところが、検索すると思った通りになりません。

まず、検索結果の中身が、リダイレクト先(QRコード表示用ページ)になっていました。これでは中身に何を書いても検索キーワードに反映されません。

また、検索結果をクリックすると、Google や Yahoo が(勝手に)携帯電話用に変換してしまう。ずっと下の方にある「ページを直接表示する」で、目的のページを表示できるものの、そんなことをしてくれる一般ユーザはまずいないだろう。

問題点

1つ目の問題点は「検索エンジンが(目的のページではなく)リダイレクト先のページをクロールしている」こと。

2つ目は「元々携帯電話用に作ったページなのに、GoogleやYahooが携帯電話ように変換してしまう」こと。

これは携帯用のページだ!

2つ目はわりとあっさりと解決。Google に説明があったので、コレの通りにしました。

この指定は(同じエンジンを使っているから当然ですが)Yahooにも効果がありました。

リダイレクト前の内容をクロールしろ!

ページのリダイレクトに、meta タグの redirect 要素を使っていたのですが、どうやら検索エンジンはこの要素をたどってくれるらしい。

ほとんどの場合はその方が好都合なのですが、今回のケースでは余計なお世話。

そこで、どうやら「検索エンジンはJavaScriptを無視する」らしいことを利用して、JavaScript( location.href ) でリダイレクトするようにしました。

解決

以上の対策で、目的が達成できました。

とあるお客様からの相談で、「(Webサイトの)画像をクリックしたら、声が流れるようにしたいけど、できるものですかね?」という案件をいただいていました。

その当時は、私たちとは別の業者さんがサイト管理をされていたので、あまり深入りせずに「できますよ。今は私がサイトを触るわけにはいかないので、声の録音方法と、業者さんに送る方法を教えますね」程度の対応に留めておきました。

確かに要求事項はクリアしているけど・・・

数日後、件のお客様から「お陰さまでできました」と連絡があり、そのページを見せてもらいました。

殺風景なプレイヤー

画像をクリックすると、別ページに遷移して殺風景なプレイヤーが表示されて声が流れ始めました。ファイルのダウンロード速度もやや気になる。

参考のためにコードを見てみると、お客さんが送ったwavファイルに a タグでリンクを張っているだけでした。HTML5対応のブラウザならば内蔵プレイヤーで、そうでなければプラグインのプレイヤーで再生されるわけです。

うーん、確かに「画像をクリックしたら声が流れる」という要求はクリアしているし、お客さんも文句はないみたいだけど・・・。本当にこれでいいのか?

今回の要求の意図しているところって、「見ている人が画像(サイト主の顔のイラスト)をクリックしてみたら、声が出てきてびっくり」みたいな遊び心&いたずら心なんじゃないかと思うのですよ。少なくとも、私はそう受け取りました。

それが、ページは遷移しちゃう(声の主のイラストが見えなくなる)わ戻るボタンを押さなきゃいけないわでは、仕掛けの魅力が半減ですよ。

続きを読む »

ある案件で、Excelシートを全自動で作る必要が出ました。

まあ、その程度はVBAで解決・・・、と思ったら、条件付き書式に指定した式がずれてしまう・・・。

初めは凡ミスかと思ってコードを確認しても、おかしな点は見当たらない。

で、ネットで調べてみたら、マイクロソフト公認のExcelのバグでした。

バグの概要

バグが発生する条件は、

  • Excel2000以降(少なくとも2007では発生)
  • 条件付き書式はVBAで指定する
  • 条件は 相対セル参照 で指定する
  • 選択したセル以外に条件付き書式を指定する

というもの。詳細はマイクロソフトのページをみてください。

回避方法

今回の案件では、上の3つはどうしても回避できない項目でした。

(マイクロソフトのページでは、「VBA使うな」とか「絶対参照で書け」なんて回避方法が紹介されてました)

でも、最後の「選択したセル以外に~」という項目は回避できます。

要は、「条件付き書式を指定したいセルを選択しておけばOK」ということです。

実際、そのようにコードを組んだら、あっさりと解決しました。

ちなみに、マイクロソフトのページにあったコードを、この方法で回避するとこうなります。

Sub Example()
    Dim rOrgSelect As Range
    
    ThisWorkbook.Worksheets(1).Range("A1").Select
    With ThisWorkbook.Worksheets(1).Range("B1")
        Set rOrgSelect = Selection
        .Select
        
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, _
        Formula1:="=A1=1"
        .FormatConditions(1).Interior.ColorIndex = 46
    End With
    
    rOrgSelect.Select
End Sub

2,6,7,15行目が、Excelのバグを回避のために追加した行です。

最新用語がすぐに変換できるようになる辞書や予測変換が便利なGoogle 日本語入力

たまに(ひっそりと)停止してしまうのが玉にキズです。

そんな時の対処方法です。

  1. [ALT]+[半角/全角] で日本語入力をONにする(すると、MS-IMEなど別のIMEが動く)
  2. [Shift]+[Ctrl]でIMEを切り替える

(設定によっては、[Shift]+[Ctrl]ではないかも)

SharpSsh は.NET 環境で SSH 接続をするための ライブラリ です。

今回、とあるシステム開発のために、VC# で SFTP を行う必要があったので、使ってみました。

とても簡単に使えて便利なのですが、ファイル更新時刻を取得/設定できなかったので、それ用の関数を追加しました。

変更箇所

SharpSshはソースも公開されているので、簡単に機能追加ができます。

今回手を加えたのは、Sftp.cs というファイルです。public class Sftp のブロックの中に以下のコードを追加しました。


namespace Tamir.SharpSsh
{
  public class Sftp : SshTransferProtocolBase
  {
    (略)
        // MTime
        public int GetMTime(string path)
        {
          Tamir.SharpSsh.jsch.SftpATTRS attr;

            try
            {
              attr = SftpChannel.stat(path);
              return attr.getMTime();
            }
            catch (Exception e)
            {
              return 0;
            }
        }
        public void SetMTime(string path,int mtime)
        {
          try
          {
            SftpChannel.setMtime(path,mtime);
          }
          catch (Exception e)
          {
          }
        }

    (略)
  }
}

実はSharpSsh ライブラリのソース内では、SFTPの(たぶん)全ての機能を使えるように実装されているのですが、外部に公開されている関数がごく一部なのです。

なので、今回組んだのは機能を外部に提供する部分だけです。

使用上の注意

この機能(リモートファイルの更新時刻を取得/設定)を使いたかったのは、ローカルファイルのそれと比較してどちらか新しい方を残す、ということをしたかったのです。

ところが、.NET で使われるファイル更新時刻の表現方法は DateTime 型で、今回作ったGetMTime()関数とは異なる形式です。

DateTime 型は、1601/01/01 00:00:00 からの経過時間を 100ns で割った値です。

片やGetMTime()の戻り値はUNIX形式。つまり、1970/01/01 00:00:00 からの経過時間(秒)です。

そこで、DateTime 型を UNIX形式に変換する関数を作りました。


  static int DateTime2UnitTime(DateTime dt)
  {
    const long basetime = 116444736000000000L;
    // ( = DateTime(1970,1,1,9,0,0,0).ToFileTime() )
    return (int)((dt.ToFileTime() - basetime) / 10000000);
  }

basetime定数は、1970/01/01 09:00:00(DateTime が日本時間なので9時です。本来ならUTCに合わせて作るべきなのですが・・・)を ToFileTime()関数でlong型にしたもの。1601年から1970年までを、100ns単位で表したものです。

で、それを知りたいDateTimeから引いて、秒単位に直すと 目的のUNIX形式になる、というわけです。

他にも

他のSFTPの機能も簡単に実装できるので、そのうち作りたいと思います。

3週間ほど前に海外からの攻撃を受けていたサーバ。最近は順調に動いています。

それでも「定期的にログは見よう」と思っていたのに、気がつくと3週間経っていました。

久しぶりに見てみると、、、

続きを読む »

HTMLエスケープ

HTMLエスケープ

WordPressでもHTMLベタ書きでも、タグの説明のためにタグを書きたい時には困ります。

なにしろ、普通にタグを書くと、表示されずにタグとして働いてしまうのですから。

今日は、タグをそのまま表示する方法を紹介します。

続きを読む »

金曜の昼に、お客様から「メールがなかなか届かない」という第一報が入りました。

メールマガジンを発行するために、Mailman というメーリングリストシステムを使っています。試しに会員登録をしてみたが、仮登録メールがなかなか届かないとのこと。

このサーバはお名前.com の VPS で、Mailman、WordPress、Subversion、Redmine などなど、いろいろなサービスを動かしているので、問題が複雑に見えてしまいました。

原因が分かった今となっては、「なんであの時気がつかなかったのか!」と思うことばかりですが、臥薪嘗胆の意味を込めて、恥を公開しておきます。

続きを読む »

以前、「最近の投稿」に日付を入れる方法を紹介しました。

同じ悩みを持つ方が多かったようで、けっこうなアクセス数がありました。

今回は、ITPK版ページ ウィジェットを作ってみます。

親兄弟ページへのリンク

やりたいことを大雑把に書くと、「現在表示中のページの、親ページと兄弟(姉妹?)ページを表示する」ということです。

続きを読む »

2011-06-11 : post-commit スクリプトを修正しました。

昨日の記事で紹介した、”Subversionのリポジトリをsvnsyncコマンド使ってミラーリングする”方法の追記です。

昨日は簡単に書くと、本家リポジトリのコミット完了後に分家リポジトリにsvnsyncを発行する、というところまでやりました。

今回は、分家サーバが稼働中のときだけ svnsync する、という処理を加えましょう。

続きを読む »