Perl で、サーバにモジュールがインストールされているか確認する方法

コマンドラインから、以下の 1行を実行する。 引数 -M と <モジュール名> の間には、スペースはいらない。
# perl -M<モジュール名> -e ''
もしモジュールがインストールされていれば何も起こらない。モジュールがインストールされていなければ Can't locate <モジュール名>.pm 云々というエラーが出る。
コマンドラインから、以下の 1行を実行する。 引数 -M と <モジュール名> の間には、スペースはいらない。
# perl -M<モジュール名> -e ''
もしモジュールがインストールされていれば何も起こらない。モジュールがインストールされていなければ Can't locate <モジュール名>.pm 云々というエラーが出る。

Amazon アソシエイトで、ASIN コードの入力をラクにする方法

  1. まず、/mt-static/images に amazon.gif ←の画像をアップロード /mt-static/mt_ja.js に以下のコードを追加
    function AmazonLink(e) {
      if (!canFormat) return;

      var associate_id = '<font color="blue">twinklexxx</font>'; // 自分のアソシエイト ID に変更
      var xslt = '<font color="blue">https://aws.twinkle.cc/amazon.xsl</font>'; // 自分の XSLT のアドレスに変更
      var access_key = '<font color="blue">152ZP71KPB47XM09CS02</font>'; // 自分の Web サービス Access Key ID に変更

      var str = getSelected(e);
      var asin = prompt('Enter Amazon ASIN','');
      var country = prompt('Enter Country (us or jp)', 'us');
      if (asin != null && country != null) {
        if (str == '') {
          if(country == 'jp') {
            code = '-22';
          } else if(country == 'us') {
            code = '-20';
          }
          setSelection(e, '<iframe src="https://xml-' + country + '.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=' + asin + '&AssociateTag=' + associate_id + code + '&AWSAccessKeyId=' + access_key + '&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=' + xslt + '" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="175"></iframe>\n');
        } else {
          setSelection(e, '<iframe src="https://xml-' + country + '.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=' + asin + '&AssociateTag=' + associate_id + code + '&AWSAccessKeyId=' + access_key + '&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=' + xslt + '" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="175"></iframe>\n');
        }
      }
      return false;
    }
  2. 次に、/tmpl/cms/edit_entry.tmpl 583 と 642 行目あたりに以下のコードをそれぞれ追加(通常のエントリー書き込み部分と「続きを読む」用に、2ヶ所修正が必要)
            write('<img title="<MT_TRANS phrase="Quote">" onclick="return formatStr(document.entry_form.text, \'blockquote\')" src="<TMPL_VAR NAME=STATIC_URI>images/formatting-icons/quote.gif" alt="<MT_TRANS phrase="Quote">" width="26" height="19" />');
            <strong>write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');</strong>
            write('<img title="<MT_TRANS phrase="Quote">" onclick="return formatStr(document.entry_form.text_more, \'blockquote\')" src="<TMPL_VAR NAME=STATIC_URI>images/formatting-icons/quote.gif" alt="<MT_TRANS phrase="Quote">" width="26" height="19" />');
            write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text_more)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');
  3. 最後に、/tmpl/cms/bm_entry.tmpl 334 と 373 行目あたりに以下のコードをそれぞれ追加(同様に通常のエントリー書き込み部分と「続きを読む」用に、2ヶ所修正が必要)
            write('<a title="<MT_TRANS phrase="Quote">" href="#" onclick="return formatStr(document.entry_form.text, \'blockquote\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-quote.gif" alt="<MT_TRANS phrase="Quote">" width="22" height="16" /></a>');
    <strong>        write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');</strong>
            write('<a title="<MT_TRANS phrase="Quote">" href="#" onclick="return formatStr(document.entry_form.text_more, \'blockquote\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-quote.gif" alt="<MT_TRANS phrase="Quote">" width="22" height="16" /></a>');
            <strong>write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text_more)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');</strong>
Updated: 2007/04/21 Created: 2007/07/01
  1. まず、/mt-static/images に amazon.gif ←の画像をアップロード /mt-static/mt_ja.js に以下のコードを追加
    function AmazonLink(e) {
      if (!canFormat) return;

      var associate_id = '<font color="blue">twinklexxx</font>'; // 自分のアソシエイト ID に変更
      var xslt = '<font color="blue">https://aws.twinkle.cc/amazon.xsl</font>'; // 自分の XSLT のアドレスに変更
      var access_key = '<font color="blue">152ZP71KPB47XM09CS02</font>'; // 自分の Web サービス Access Key ID に変更

      var str = getSelected(e);
      var asin = prompt('Enter Amazon ASIN','');
      var country = prompt('Enter Country (us or jp)', 'us');
      if (asin != null && country != null) {
        if (str == '') {
          if(country == 'jp') {
            code = '-22';
          } else if(country == 'us') {
            code = '-20';
          }
          setSelection(e, '<iframe src="https://xml-' + country + '.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=' + asin + '&AssociateTag=' + associate_id + code + '&AWSAccessKeyId=' + access_key + '&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=' + xslt + '" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="175"></iframe>\n');
        } else {
          setSelection(e, '<iframe src="https://xml-' + country + '.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=' + asin + '&AssociateTag=' + associate_id + code + '&AWSAccessKeyId=' + access_key + '&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=' + xslt + '" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="175"></iframe>\n');
        }
      }
      return false;
    }
  2. 次に、/tmpl/cms/edit_entry.tmpl 583 と 642 行目あたりに以下のコードをそれぞれ追加(通常のエントリー書き込み部分と「続きを読む」用に、2ヶ所修正が必要)
            write('<img title="<MT_TRANS phrase="Quote">" onclick="return formatStr(document.entry_form.text, \'blockquote\')" src="<TMPL_VAR NAME=STATIC_URI>images/formatting-icons/quote.gif" alt="<MT_TRANS phrase="Quote">" width="26" height="19" />');
            <strong>write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');</strong>
            write('<img title="<MT_TRANS phrase="Quote">" onclick="return formatStr(document.entry_form.text_more, \'blockquote\')" src="<TMPL_VAR NAME=STATIC_URI>images/formatting-icons/quote.gif" alt="<MT_TRANS phrase="Quote">" width="26" height="19" />');
            write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text_more)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');
  3. 最後に、/tmpl/cms/bm_entry.tmpl 334 と 373 行目あたりに以下のコードをそれぞれ追加(同様に通常のエントリー書き込み部分と「続きを読む」用に、2ヶ所修正が必要)
            write('<a title="<MT_TRANS phrase="Quote">" href="#" onclick="return formatStr(document.entry_form.text, \'blockquote\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-quote.gif" alt="<MT_TRANS phrase="Quote">" width="22" height="16" /></a>');
    <strong>        write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');</strong>
            write('<a title="<MT_TRANS phrase="Quote">" href="#" onclick="return formatStr(document.entry_form.text_more, \'blockquote\')"><img src="<TMPL_VAR NAME=STATIC_URI>images/html-quote.gif" alt="<MT_TRANS phrase="Quote">" width="22" height="16" /></a>');
            <strong>write('<a title="<MT_TRANS phrase="AmazonLink">" href="#" onclick="return AmazonLink(document.entry_form.text_more)"><img src="<TMPL_VAR NAME=STATIC_URI>images/amazon.gif" alt="<MT_TRANS phrase="AmazonLink">" width="26" height="19" /></a>');</strong>
Updated: 2007/04/21 Created: 2007/07/01

Movable Type で、印刷用ページのスタイルシートを指定する方法。

要は、印刷用のスタイルシート(例えば、styles-print.css)を用意して、テンプレートから通常のものと一緒に指定する。以下の手順で設定する。
  1. Movable Type の管理画面の各ページのテンプレートで、以下の部分を探す。
    <link rel="stylesheet" href="styles-site.css" type="text/css">
  2. 以下の青字の部分を追記する(行を分けて書いているが、それぞれ 1行でもよい)。
    <link rel="stylesheet"
    href="styles-site.css" type="text/css" media="screen,tv" />
    <font color="blue"><link rel="stylesheet"
    href="styles-print.css" type="text/css" media="print" /></font>
  3. Movable Type の管理画面の、テンプレート→インデックスタブ→テンプレートを新規作成で、印刷用スタイルシートを作成する。
    • テンプレート名:スタイルシート(印刷用)
    • ファイル名:styles-print.css
    • このテンプレートにリンクするファイル:空白のまま
それでは styles-print.css に何を書くのか?基本的には、styles-site.css の内容をそのままコピペする。そしてカスタマイズしていけばいいのだが、そのまま印刷プレビューしてみるとすぐにわかることがある。ページをまたがるエントリーや、ウェブページが、うまく表示されないのだ。これは styles-site.css の中にある、 overflow: hidden; と書いてある部分のいたずらである。styles-site.css のスタイルシートの中には数ヶ所この記述が散らばっているのだが、styles-print.css の中ではこれをすべて /* … */ でコメントアウトすればよい。 Movable Type 3.2 であれば、styles-print.css の最後に、とりあえず以下を追記しておけば、サイドバー(Movable Type デフォルトテンプレート右側の部分)や、コメント、トラックバックが印刷時には印刷されなくできる。
#beta,
#comments,
.content-nav,
.trackbacks,
{
    display: none;
}
要は、印刷用のスタイルシート(例えば、styles-print.css)を用意して、テンプレートから通常のものと一緒に指定する。以下の手順で設定する。
  1. Movable Type の管理画面の各ページのテンプレートで、以下の部分を探す。
    <link rel="stylesheet" href="styles-site.css" type="text/css">
  2. 以下の青字の部分を追記する(行を分けて書いているが、それぞれ 1行でもよい)。
    <link rel="stylesheet"
    href="styles-site.css" type="text/css" media="screen,tv" />
    <font color="blue"><link rel="stylesheet"
    href="styles-print.css" type="text/css" media="print" /></font>
  3. Movable Type の管理画面の、テンプレート→インデックスタブ→テンプレートを新規作成で、印刷用スタイルシートを作成する。
    • テンプレート名:スタイルシート(印刷用)
    • ファイル名:styles-print.css
    • このテンプレートにリンクするファイル:空白のまま
それでは styles-print.css に何を書くのか?基本的には、styles-site.css の内容をそのままコピペする。そしてカスタマイズしていけばいいのだが、そのまま印刷プレビューしてみるとすぐにわかることがある。ページをまたがるエントリーや、ウェブページが、うまく表示されないのだ。これは styles-site.css の中にある、 overflow: hidden; と書いてある部分のいたずらである。styles-site.css のスタイルシートの中には数ヶ所この記述が散らばっているのだが、styles-print.css の中ではこれをすべて /* … */ でコメントアウトすればよい。 Movable Type 3.2 であれば、styles-print.css の最後に、とりあえず以下を追記しておけば、サイドバー(Movable Type デフォルトテンプレート右側の部分)や、コメント、トラックバックが印刷時には印刷されなくできる。
#beta,
#comments,
.content-nav,
.trackbacks,
{
    display: none;
}

MySQL で、重複レコードを削除する。

重複レコードをSQLデータベースから一括削除:(Nucleusの使い方) にその方法が紹介されている。
  1. 対象のテーブルから重複レコードを除いて新しいテーブルにすべてのレコードを重複なしで書き出す
  2. もとのテーブルを削除
  3. 新しいテーブル名を変更
これはあまりスマートな方法を思えなかったので、他に方法はないか、あちこち探し回ってみたものの、うまい方法が見つからなかった。 SQL 文としては、以下のようになる。field_1、field_2(増やしてもよい)は、重複に関係するフィールドである。
CREATE TABLE temp_table as SELECT * FROM main_table GROUP BY field_1, field_2;
DROP TABLE main_table;
ALTER TABLE temp_table RENAME TO main_table;
重複レコードをSQLデータベースから一括削除:(Nucleusの使い方) にその方法が紹介されている。
  1. 対象のテーブルから重複レコードを除いて新しいテーブルにすべてのレコードを重複なしで書き出す
  2. もとのテーブルを削除
  3. 新しいテーブル名を変更
これはあまりスマートな方法を思えなかったので、他に方法はないか、あちこち探し回ってみたものの、うまい方法が見つからなかった。 SQL 文としては、以下のようになる。field_1、field_2(増やしてもよい)は、重複に関係するフィールドである。
CREATE TABLE temp_table as SELECT * FROM main_table GROUP BY field_1, field_2;
DROP TABLE main_table;
ALTER TABLE temp_table RENAME TO main_table;