2008年7月30日水曜日

Amazon Web Serviceの Search Indexって

今はDVDってあるけど、将来はBlu Rayになるのかな?
それともDVDはDVDで残るのかな?
仕様変更による影響が大きそう…

2008年7月28日月曜日

Amazon Webサービスのパラメータ

一番よく使う商品の検索(ItemSearch Operation)の主なパラメータについてのメモ。

大元のリファレンスはAmazon Web Services: Amazon E-Commerce Service
フレームになっていてリンクし辛いので、説明ページへのリンクはフレーム内の個別ページへのリンクにした。

  • Operation
    • リクエストの種類。(必須項目)
    • 固定で「ItemSearch」
  • SearchIndex
  • Keywords
    • 任意のキーワード
    • タイトルや著者など多くのデータを対象に探してくれるので、アバウトな検索に便利。
  • ItemPage
    • 検索結果ページ数。ItemSearchでは1回のリクエストで最大10個のデータを返す。11個目以降が欲しければページ数を指定する。
    • 何も指定しなければ1ページ目が返される。つまりトップ10.
  • Sort
    • 並び順
    • 説明ページ:Sort Values for JP
    • SearchIndexがBlendedの場合は指定できない(エラーになる)
    • リリース順で取得したい場合に、DVD・CDと本ではパラメータが違うので注意
  • ResponseGroup
    • 取得データ内容
    • 説明ページ:Response Groups
    • 「Small,Images」あたりを基本に、必要に応じてTracksとかCustomerReviewsとかを追加すればたいてい間に合う

WWW SQL Designerの Save ・ Loadをスマートに改良

WWW SQL Designerの改良第2弾。(第1弾はWWW SQL Designerのインストール&設定。)
WWW SQL Designer(以下WSDと略す)でServer側にデータを保存する場合の操作を楽にする。

ちなみにWWW SQL Designerの現在の最新版は2.1.1。2.0.1からそれほど変更はなさそう。


初期表示時のデータのロード
これは改良ではなくもともと本体が持つ機能。
ドキュメントには書いてないが、WSDでは下記のようにURLに保存時の名前を付けてアクセスすると、保存されているデータを初期表示できる。

http://localhost/wsd/?keyword=foo


保存時の名前のセット
保存する時に名前を訊かれるが、デフォルトが空なのでいちいち入力するのが面倒。上記のようにURLにkeywordがある場合、それをデフォルトで表示すると便利。
js/wwwsqldesigner.jsの1197行目を下記のように変更する。
var name = prompt(_("serversaveprompt"),"");

var name = prompt(_("serversaveprompt"), location.href.split("=")[1]);


ロード時のURLのリセット
上記の保存時の名前のセットする改良を生かすには、ロード時にはロードする名前に合わせてURL中のkeywordが変わるようにしたい。
js/wwwsqldesigner.jsの1208行目(「SQL.IO.prototype.serverload = function(e, keyword)」の直下)に下記を追加する。
if (!keyword) {
 var name = prompt(_("serverloadprompt"),"");
 if (name) {
  location.href = "?keyword=" + encodeURIComponent(name);
 }
 return;
}

これでロード時にそのkeywordのURLに遷移するようになる。

レンタルサーバーでメール受信時にプログラム起動する方法


さくら

  • maildropというメール配信プログラムを使っているため、.forwardによるメール処理設定は使えない
  • maildropでは、メールアカウントごとにmailfilterを設定すればプログラムの起動など好きな処理が可能
  • catch all(※1)は無いので、virtualなアカウントで受信してプログラムを起動することはできない
  • Gmailのようにメールアカウントの後ろに"+"を付けてメールアカウントを擬似的に増やすことはできないようだ
  • 1つのメールアドレスで複数の処理やデータを振り分けるには、下記の方法が考えられる
    • サブドメインで振り分ける(@の左側が同じなら、異なるサブドメインでも同一アカウントとして扱われるらしい)
    • 件名にKEYを入れてそれで判断する(参考:mailto:について
  • メールの自動返信だけならmailfilterでmailbotを使えばできる


XREA


X Server


結論
特定のサブドメインに来るメールをプログラム側で宛先メールアドレスごとに処理をしたい場合、X Serverを使うのが良さそう。(試したわけでは無い。要確認。mailfilterを編集しなければいけない?件が気になる)
(例)123.shop@sub.example.com(123の所は任意の数字)に来たら、メールの振り分けで「宛先が.shop@sub.example.comのメールは/var/php/reply.phpに渡す」という設定をしておく


※1:「catch all」とは、存在しないメールアカウントへのメールを特定のメールアドレスに転送する機能のこと

CentOSで vsFTPdに 匿名(anonymous)でアクセス

自分しかアクセスしない(できない)FTPサーバ(vsFTPd on CentOS)にanomnymousでファイルを転送できるようにしたい。
(vsFTPdやファイアウォール等の他の設定は既にしてある。)


  1. vsFTPdで使うディレクトリの所有者設定(グループは関係ないかも)
    mkdir /var/ftp/my
    chown ftp:ftp /var/ftp/my
  2. vsFTPdの設定ファイルを編集する
    vi /etc/vsftpd/vsftpd.conf
  3. anonymousについての設定をする
    # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
    anonymous_enable=YES

    # obviously need to create a directory writable by the FTP user.
    anon_upload_enable=YES
  4. vsFTPdを再起動
    /etc/init.d/vsftpd restart

Windowsのコマンドプロンプトから接続してみる
  1. 接続(-Aはanonymousにするオプション)
    C:>ftp -A 192.168.1.xxx
    Connected to 192.168.1.xxx.
    220 (vsFTPd 2.0.5)
    331 Please specify the password.
    230 Login successful.
    Anonymous login succeeded for xxx@xxx
  2. 最初いる場所は「/var/ftp」なので、所有者をftpにしたディレクトリに移動
    ftp> cd my
    250 Directory successfully changed.
  3. ファイルを転送
    ftp> put c:test.txt
    200 PORT command successful. Consider using PASV.
    150 Ok to send data.
    226 File receive OK.
    ftp: 24 bytes sent in 0.00Seconds 24000.00Kbytes/sec.
  4. これで/var/ftp/my/test.txtに転送された。このファイルのアクセス権限を見てみる
    -rw------- 1 ftp ftp
  5. vsftpd.confのlocal_umaskは"022"にしてあるが、これはanonymousには適用されないようだ


参考:
 floatingdays: Linuxコマンド備忘録
 How to build Internet Server with Linux: ftpのセキュリティ
 ファイルのパーミッション、アクセス権限について (Unix Linux)


XMailからバッチファイルを起動する方法

XMailで、カスタムドメイン処理コマンドエイリアスを使ってWindows上のバッチファイルを実行する方法。
基本的に使い方はコマンド実行機能 - xmailserver.jpに書いてあるが、一部このままでは動かないのでメモ。


バッチファイルを使う例
(パラメータ間のスペースは実際にはタブで書く)

"external" "1" "0" "C:test1.bat" ""
"external" "1" "0" "C:test2.bat" ""


ポイント
  • externalコマンドのパラメータが3つだと動かないので、空でも4つ目のパラメータを渡す必要がある
  • 優先度(上記例では1)を0にすると環境によっては(?)実行されないことがあるので1にした方が良さそう
  • メールのファイルを渡す場合、タイムアウト秒数(上記例では0)を余裕を持った数字(300とか)にする。そうしないと外部プログラムを実行する前に、XMailがファイルを削除してしまう可能性がある(参考:コマンド実行機能 - xmailserver.jp
  • バッチファイル実行時のディレクトリは下記になる。間違えてバッチファイルからの相対パスを書かないように注意
    C:WINDOWSsystem32
  • コマンドは複数行並べて書くことができる(参考:コマンド実行機能 - xmailserver.jp
  • コマンド実行機能 - xmailserver.jpにはコマンドとしてWindowsのコマンドやバッチファイルを指定できると書いてあるが、実際にはできないようだ。(あるいはやり方が特殊なのか?)
    "コマンド" には XMail の内部コマンド、OS の内部コマンドや外部コマンド、シェルスクリプト(UNIX)やバッチファイル(Windows)、標準入出力に対応した任意のプログラムなどを指定できます。

2008年7月21日月曜日

Amazonアソシエイト用のURL

3分LifeHacking:Amazonの長いURLを短縮表示する - ITmedia Biz.IDによると、下記のように短くできるらしい。
アフィリエイトの場合でも「構わない」と書いてある。

http://amazon.jp/dp/[asin]


しかし、hxxk.jp - Amazon の http://www.amazon.co.jp/dp/ASIN No. 形式ではアソシエイト ID が使えない !?によると、上記ではアソシエイトが有効にならないとのこと。
(※下の追記参照)
アソシエイトが有効になる短い形は下記らしい。
http://amazon.jp/o/ASIN/[asin]/[affid-22]/ref=nosim

上記のURLの最後の「ref=nosim」(noismじゃない!)は、商品の詳細ページに直接遷移させるために付けてある。
これにより以前はアソシエイトによる収入が増える可能性が高くなっていたが、現在は収益への直接の影響はないようだ。(参考:Amazonアソシエイトの紹介料率システム変更にともなう戦略の変化 [絵文録ことのは]2007/01/28

ただし上記の参考リンク先に書いてあるとおり、その商品の詳細にリンクを貼りたい場合(その商品の関連記事を書いた場合など)、ref=nosimを付けておいた方が親切になるケースが多いと思う。(下記の追記参照)


(2011/5/26 追記)
「http://amazon.jp/dp/[asin]」形式のURLの場合は「http://amazon.jp/dp/[asin]?tag=[affid-22]」というようにクエリーストリングとしてトラッキングID(アフィリエイトID)を付ければ有効みたい。(文字数は「http://amazon.jp/o/ASIN/[asin]/[affid-22]」形式と同じ。)
また、「http://amazon.jp/o/ASIN/[asin]/[affid-22]」形式の場合の「ASIN」は小文字でもいいみたい。
Amazon公式のリンクの動作確認ツールで確認すると便利。

それから、今はref=nosimを付けても付けなくても同じページになるようだ。


くまくまーさんのサイトを見やすくするuserContent.css

Rails関連の参考記事が充実している「ヽ( ・∀・)ノくまくまー(ノk|*‘-‘)<ノリマツ!愛だよ、愛!)」。
良いサイトなのだが、記事によっては記事部分の横幅が広すぎて横スクロールしないと読めないのが読み辛い。

FirefoxのuserContent.cssで何とかしよう。

@-moz-document url-prefix("http://wota.jp/ac/") {
 div.day {
  max-width: 950px;
 }
}

見やすくなった。



PHPで fgets()する時の改行コード

Macの場合、php.iniで「auto_detect_line_endings = on」を指定すれば、改行コードを意識しなくて良いらしい。
auto_detect_line_endingsはデフォルトではコメントアウトされている。

注意: マッキントッシュコンピュータ上で作成されたファイルを読み込む際に、 PHP が行末を認識できないという問題が発生した場合、 実行時の設定オプションauto_detect_line_endings を有効にする必要が生じるかもしれません。

php.iniにはこう書かれている。
; If your scripts have to deal with files from Macintosh systems,
; or you are running on a Mac and need to deal with files from
; unix or win32 systems, setting this flag will cause PHP to
; automatically detect the EOL character in those files so that
; fgets() and file() will work regardless of the source of the file.
(ここでいう「Mac」とは、OS Xになる前のバージョン9までの古いMacを指すと思われる。参考:改行コード - Wikipedia


これは逆に言うと、Macが関わらないLinux・Windowsだけの環境なら、auto_detect_line_endingsの設定も含めてfgets()での改行コードについて特に意識しなくてよいということだ。

試しにWindows上のPHPで改行コードが「CR+LF」の場合と「LF」の場合でfgets()結果に違いがあるか実験してみたところ、違いは無かった。
(auto_detect_line_endingsはコメントアウトのまま。)
しかし、改行コードが「CR」の場合、全て1行目として扱われてしまった...。

テストに使ったコードは下記の通り。
<?php
$fp = @fopen('test.php', 'r');
$i = 1;
if ($fp) {
 while (!feof($fp)) {
  echo "$i : " . fgets($fp);
  $i++;
 }
 fclose($fp);
}


あと、fgets()で取得した文字列の最後には改行コードが付いているので注意。不要な場合はrtrim()で取り除ける。

2008年7月15日火曜日

iGoogleからの Bloggerへの投稿ガジェットがパワーアップ

いつの間にか、下にPublishボタンとSave Draftボタンが追加されてた。
あいかわらずLabelのサジェストはまだみたい。
ということでガジェットからの投稿です。

2008年7月8日火曜日

httpd.confでアップロードファイルサイズ制限を指定する方法

PHPのアップロードファイルのサイズはphp.iniのpost_max_sizeとupload_max_filesizeで制限できるが、php.iniではphpごとに制限値を変えることができない。

post_max_size、upload_max_filesizeともに"PHP_INI_PERDIR"なので、php.iniか.htaccessかhttpd.confで設定可能
httpd.confや.htaccessなら、phpごと(URLごと)に柔軟に制限値を設定できる。


httpd.confでの設定例

<Location ~ /upload.php$>
# 100MB = 100 * 1024 * 1024 (bytes)
php_value post_max_size 104857600
php_value upload_max_filesize 104857600
</Location>
単位はバイト。100MBと書くと100バイトと認識されてしまう。


なお、同じくphp.iniの設定値のmemory_limitはファイルサイズより大きくしなければならないが、memory_limitは"PHP_INI_ALL"なのでどこでも(PHPファイル内でのini_set()でも)設定できる。

サーバ証明書購入のための比較調査

2008年7月現在での、サーバ証明書購入候補の調査メモ。


前提知識

  • サーバ証明書によっては携帯電話の対応機種が限定される
  • EV版だと企業の存在も保証される。(参考:EV SSL証明書とは - ベリサイン
    • ただしその分、手続きも購入面倒らしい。
    • IE7だけでなく、Firefox3でも緑色表示された。


調査のポイント
  • 1年間の最安価格とEV版の価格
  • 携帯電話に対応しているか
  • Webサイトが日本語でなかったり料金表示が円でないもの(Thawte等)は除外した


サーバ証明書の比較


販売代理店(リセラー)の比較
  • InstantSSL
    • COMODOの販売代理店
    • 価格
      • 最安:7,350円
      • EV版:52,500円
    • 携帯対応状況
      • コモドジャパンと同じだと思う
  • デジトラスト
    • COMODOの販売代理店
    • 価格
      • 最安:15,540円
    • 携帯対応状況
      • ルート証明書が"Entrust"に変更されたらしい。
      • Entrustはdocomoが対応してないようだ
  • Rapid-SSL.jp
    • Rapid SSLの販売代理店
    • 価格
      • 3,900円
    • 携帯対応状況
      • CAルートは"Equifax Secure Global eBusiness CA-1"。auが対応していないようだ。
  • トラスティワークス
    • Rapid SSL、Quick SSL Premium等の販売代理店
    • 価格
      • 最安:3,840円(Rapid SSL)
    • 携帯対応状況
      • それぞれのCAによるが、基本的に期待できない
  • 日本クロストラスト
  • CSPセントラル警備保障
    • SureServerはCyberTrustのリセル
    • 価格
      • 最安:36,750円
      • 携帯対応版:63,000円(SureServer)
    • 携帯対応状況
      • SureServerはルート証明書が"GTE Cybertrust Global Root"なのでほぼ対応
      • SureServer以外は未対応


参考:
 携帯電話とSSLルート証明書
 個人情報保護法時代のIISセキュリティ対策(後編) - @IT
 SSLサーバー証明書の取得 ~ ネットショップの身元証明

2008年7月6日日曜日

アンインストールできないウイルスバスターをアンインストールする方法

プレインストールされていたウイルスバスター2008体験版をアンインストールしようとしたが、「アップデートが終了してから実行してください」とかそんなようなメッセージが出てアンインストールできない。タスクトレイから終了させることすらできない。


探してみたら、トレンドマイクロのサイトでアンインストールするツールを配っていた。これは最初から同梱しておいて欲しい。

JP-2062915 ウイルスバスター2008アンインストールツール | ウイルスバスター2008アンインストールツール [JP-2062915]

これを使ったらあっさりアンインストールできた。まさにウイルスバスターバスター

2008年7月1日火曜日

addons.mozilla.orgが落ちてる

Firefoxの公式アドオン配布サイトであるaddons.mozilla.orgが落ちてる。さっき一瞬だけ復活して、その隙にFireGestureをインストールできたのは良かった。
あと、せめてRefControlだけでも入れたんだけどなあ。

2008/07/02 追記:
サイトが落ちているのではなく、DNSあたりの障害の可能性が高いらしい。
 Mozilla-gumi Forum [One Message View / Re[2]: mozilla.org のサーバは生きていますか?]
 MozillaZine.jp :: トピックを表示 - 「ja.www.mozilla.com が見つかりません。ドメイン名を再確認してください。」と表示されてしまいます。

2008/07/02追記 その2
in te redi: OCNでmozilla.orgに繋がらない人はOpenDNSを利用するといいかもで紹介されているように、DNSをOpenDNSにしたらaddons.mozilla.orgにアクセスできた!
やはりDNSの問題だったらしい。

Apacheで特定の URLのみ認証をかけない方法

Apacheでサイト全体(または該当ディレクトリ)に認証をかけていて、ファイルのアップロードにFlashのFileReferenceを使い、かつクライアントがFirefoxだとアップロード時に認証ダイアログが再び出てくる問題がある。
原因は、Firefox上のFlash PlayerがIEのCOOKIEを使うためらしい。(参考:くじらはんどぶろぐ : Flashのファイルアップロードで Cookie が引き継がれない問題


そこで、サイト全体に認証をかけたまま、特定のURLのみ認証無しになるように設定する。
Satisfyをanyにすると、ユーザー認証かホストレベルのアクセス制限のどちらかがOKならアクセスできるようになる。(参考:core - Apache HTTP サーバ

#サイト全体には普通に認証をかける
<Location />
AuthType Digest
AuthName "realm"
AuthUserFile conf/digest/example.digest
Require valid-user
</Location>

#アップロードのURLのみ、ホストレベルのアクセス制限さえクリアすればアクセス可能にする
<Location /upload.php>
Satisfy any
</Location>


参考:
 memo.xight.org - Basic 認証をかけるが,特定のホストは認証なしで通過させる方法


名前ベースのVirtualHostでは、複数のサーバ証明書を使えない

名前ベースのVirtualHostでは、複数のサーバ証明書を使えない。

これについての解説は、[Apache-Users 2708] Re: SSLでバーチャルホストが分かりやすい。
Apacheのマニュアル(名前ベースのバーチャルホスト - Apache HTTP サーバ)にも書いてある。

ただし、サーバ証明書以外のSSL/TLS(https)設定については、普通に各VitrualHostディレクティブで定義して使える。
ネームベースのVirtualHostでSSL/TLSを使った場合、各VirtualHostに個別のサーバ証明書を用意していても、最初に記述したサーバ証明書が使われる



VirtualHostで複数のサーバ証明書を使いたい場合は、複数のIPアドレスを使うかまたは複数のポートを使い、ルータ等でフォワーディングする必要がある。

下記は、複数のポートで個別のVirtualHostのSSLを定義する場合の例。(抜粋)

Listen 443
Listen 20443

#(中略)

<VirtualHost _default_:443>
DocumentRoot /var/www/html
ServerName example.com:10443
ServerAdmin admin@example.com

SSLEngine on
SSLCertificateFile /var/httpd/ssl/ssl/server.crt
SSLCertificateKeyFile /var/httpd/ssl/ssl/server.key

#(中略)

</VirtualHost>

<VirtualHost _default_:20443>
DocumentRoot /var/www/another_html
ServerName another.example.com:20443
ServerAdmin admin@example.com

SSLEngine on
SSLCertificateFile /var/httpd/ssl/ssl/another.crt
SSLCertificateKeyFile /var/httpd/ssl/ssl/another.key

#(中略)

</VirtualHost>

Webページに組み込めるフリーの FLVプレイヤー

デスクトップアプリでなく、自分のWebページに組み込めるFLVプレイヤー。

FLV Player

"MAXI"なら、見た目等をかなりカスタマイズできる

FLVプレイヤーに求められる下記の機能も実装している。

  • 動画サイズを表示サイズに自動でフィットさせる
  • auto playの有無設定
  • auto loadの有無設定
  • ページ表示時に表示する画像の指定
  • クリックされた時に特定のURLに飛ばす


YUI Uplodaer使用例

YUI Uploaderを使う例。ほぼ本家リファレンスの沿った形。
ファイル選択ダイアログでのファイル種類のフィルタリング方法が判りづらかった。

<div id="toBeReplaced" style="width:0px;height:0px"><br />
Unable to load Flash content. The YUI Charts Control requires Flash Player 9.0.45 or higher. <br />
</div>

<input type="button" value="Open File" onclick="openFile();" />

<!-- スクリプト読み込み。Yahoo!から読み込んでもOK -->
<script type="text/javascript" src="/yui/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="/yui/element/element-beta-min.js"></script>
<script type="text/javascript" src="/yui/json/json-min.js"></script>
<script type="text/javascript" src="/yui/uploader/uploader-experimental-min.js"></script>

<script type="text/javascript">
//通常はJSと違う場所にSWFがあるのでSWFのパス指定が必要
YAHOO.widget.Uploader.SWFURL = "/yui/uploader/assets/uploader.swf";

//空のdiv要素をFlashに変える
var uploader = new YAHOO.widget.Uploader("toBeReplaced");

//ファイル選択時に全てアップロードする場合
uploader.addListener("fileSelect", function() {
 //第1引数のアップロードパスは絶対パスか、SWFからの相対パス
 //第3引数のPOSTするデータは、uploadAll()ではそれぞれのアップロードファイルごとに同じ値が送信される
 uploader.uploadAll("/path/to/upload.php", "POST", {param1: "STR", param2: 123});
});

function openFile() {
 //ファイルのフィルタリング。配列の中にハッシュを入れなければいけないので注意!(配列の意味が無い...)
 var filter = [{description: "JPEG画像 (*.jpg, *.jpeg)", extensions: "*.jpg;*.jpeg"}];
 uploader.browse(true, filter);
}
</script>



Yahoo!からYUIを読み込む場合は、crossdomain.xmlでアクセスを許可する。
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="yui.yahooapis.com" />
</cross-domain-policy>



アップロードされたデータの例。
"Upload"というフィールドに"Submit Query"という値が勝手にPOSTされる。
[09-Jun-2008 23:34:15] array (
'Filedata' =>
array (
'name' => 'ファイル名.jpg',
'type' => 'application/octet-stream',
'tmp_name' => '/tmp/path/php23D5.tmp',
'error' => 0,
'size' => 3689,
),
)

[09-Jun-2008 23:34:15] array (
'Filename' => 'ファイル名.jpg',
'param1' => 'STR',
'param2' => '123',
'Upload' => 'Submit Query',
)


参考:
 Yahoo! UI Library: Uploader
 YUI Library Examples: Uploader Control (experimental): Advanced Uploader Example


フリーのファイルアップロード用ライブラリ

ファイルアップロードのライブラリの調査メモ。
全てフリー。


ブログ アーカイブ

tags