カテゴリー: 技術系

  • Windowsでバッチファイルを実行したら、正しいパスなのにエラーになる

    Windows10で作成したバッチファイルを、Windows10でバッチファイルを実行したらエラーになった。

    問題の箇所を切り分けていったところ、バッチファイルから実行したときのみ、パスに日本語を含むフォルダの処理でエラーになっていることがわかった。
    バッチファイルの文字コードを調べたところ、「UTF-8」だった。同じようなバッチファイルでエラーにならないものは文字コードが「SJIS」だった。エラーになっていたファイルの文字コードを「UTF-8」から「SJIS」にして実行したところ、正常に処理ができた。Windowsのバッチは、UTF-8で保存すると任後を含むパスのマウントや参照ができない。

    Windows10でUTF-8対応されているが、Windowsのバッチファイルで日本語のパスを扱うところは、いまだにSJIS限定のようだ。

  • Chat Botのボタンをクリックしたときに発生するイベント

    Hangouts ChatのチャットボットをGASで作る場合、カードの中のボタンをクリックしたときに発生するイベントは、onCardClick()イベント。

    カードに設定したボタンの`actionMethodName`で設定したをユニークにすることで、複数のボタンを識別することができる。

    /**
     * Card click event handler
     **/
    function onCardClick(e) {
    
      // button is clicked.
      if (e.action.actionMethodName === '****') {
        return ******;
      }
    
    }
    
  • Fusion Tablesで日本語文字列で検索できない問題の対処

    Where句でのシングルクォートとダブルクォートの違いが原因。
    Fusion Tablesでは、文字列の囲みは、シングルクォートを使う。ダブルクォートの場合、解釈されず、エラーになる。

    検証していて厄介だったのは、Where句を用いた検索で、ダブルクォートを使うと、中身が数字だと検索できるのに、中身がマルチバイト文字列だとエラーになる。
    しかも、FusionTables.Query.sqlGet(sql)でクラッシュする。

    OKパターン

      var sql = 'select * from ' + tableId;
      sql += " where name like '%" + keyWord + "%'";
    

    NGパターン

      var sql = 'select * from ' + tableId;
      sql += ' where name like "%' + keyWord + '%" ';
    

    Fusion TableのSQLは、厳密に”を解釈するようだ。

  • iCloud.comにSMTPサーバからメールが送信できない

    システムからのメール送信用サーバから、@icloud.com宛にメールを送信すると、メールが届かなくなった。メールサーバのログを見てみると、コード450、4.7.1のステータスだった。配送先ドメインによっては DNS の MX レコードから送出元の MTA が正しいホスト名を名乗っているかどうかを確認している場合があり、これでリジェクトされたときが、「450 4.7.1」を返す。

    450 4.7.1: Helo command rejected: Host not found

    icloud.comのメールサーバで、メールを受信した際に送信元のホスト名の確認を行うようになったようだ。もしかしたら、だいぶ前から、そういう設定になっていて気が付いていなかっただけの可能性は否定できないが。

    450+4.7.1+:+Helo+command+rejected:+Host+not+found 0 0 83 0 733 SMTP - - - -
  • JSON型のテキストをJSONのオブジェクトにする

    JSON形式のテキストをJSONとして扱うには、テキストをJSONオブジェクトに変換(パース)する必要がある。 JSON.parse() 関数を使用して、JSON形式のテキストをJSONオブジェクトに変換する。 これを行うことで、JSONを扱う関数などにJSONデータとして、値を渡すことできるようになる。(Hangouts Chatへの応答はJSONでデータを作って返す必要があり、それを関数などで作ろうとするとJSONオブジェクトにパースする場面がでた)

    var jsonObj = JSON.parse(JSON形式のテキスト);

    例) Chat Bot用に実際にJSON形式のテキストをつくり、JSONオブジェクトにする

    // JSON形式のテキストを作る
    var jsonText = "";
    jsonText += '{';
    jsonText += '"header": {\n';
    jsonText += '"title": "タイトル", \n';
    jsonText += '"subtitle": "サブタイトル"\n';
    jsonText += '}\n';
    jsonText += '}\n';
     
    // JSON形式のテキストを、JSONオブジェクトに変換する
    var jsonObj = JSON.parse(jsonText);
     
    
  • Chat Botのカード内のテキストフィールドで使えるタグ

    Hangouts Chatのチャットボットのカードのテキストフィールドで使えるタグ。

    太字 Bold            
    斜体 Italic    
    下線 Underline            
    取り消し線 Strikethrough    
    フォントカラー Font Color            
    リンク Hyperlink    
    改行 Line Break    

    参考: https://developers.google.com/hangouts/chat/reference/message-formats/cards

  • GASの関数は引数の型により値渡しと参照渡しが決まる

    以下のように、関数に引数を渡す場合、引数hogeの型によって、値渡しか、参照渡しかが決まる。

    function func1(引数) {
      。。。。
    }
    

    引数が、数値、文字列、真偽値の場合は、値渡し(値を複製して、関数に渡す)。

    引数が、オブジェクト、配列の場合は、参照渡し(引数に指定したものが、書き変わる)。

    ※これは、GASの特性ではなく、JavaScriptの仕様。

  • SSL証明書のDV、OV、EV。

    SSL証明書の種類で、DV認証、OV認証、EV認証があるが、これが何の略なのか気になった。
    調べたので、メモとして残す。

    DV認証 = Domain Validation Certificate
    OV認証 = Organization Validated Certificate
    EV認証 = Extended Validated Certificate

    日本だと、ほぼ略称のDVやOVだらけなので。

  • Active Directoryに登録されたコンピュータの一覧を出力する

    AD(Active Directory)に登録されたコンピュータの一覧を出力するにでは、”csvde”コマンドを使用する。

    コンピュータの一覧をファイルで出力するには、以下のコマンドを実行する。

    csvde -u -f 出力するファイルのパスと名前 -r objectCategory=computer

    実行例)

    csvde -u -f C:\Users\administrator\Desktop\computer-list.csv -r objectCategory=computer

    1000台程度のコンピュータがADに登録されていたが、ほんの数秒で実行が終わった。

  • F5 Big-IPでサポート問い合わせ用のログを取得する

    Ciscoでいうところの「show tech-support」をBig-IPで取得する方法。

    1. sshでBig-IPにログインする
    2. nice -n 19 qkview を実行する(nice -n 20 qkview でない理由は、ロードバランサの負荷を考えて、ログ取得の優先度を下げているため)
    3. /var/tmp/.tgz にログがあるので、SCPで取得する。

    GUIでやる場合は。

    1. GUIでログインする。
    2. 「system」から「support」を選択する。
    3. Support Snapshotで「QKview」にチェックを入れて、「start」をクリックする。
    4. 生成が終わったら、ダウンロードのボタンが画面に出るので、クリックしてダウンロードする。

    以上。