<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>さくらたんどっとびーず</title>
	
	<link>http://sakuratan.biz</link>
	<description>さんまがおいしい季節だねー(´・ω・`)</description>
	<lastBuildDate>Sat, 24 Dec 2011 09:17:35 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/sakuratan/HTqh" /><feedburner:info uri="sakuratan/htqh" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>PostfixとDovecotでさくらVPS上にバーチャルメールボックスが利用できるメールサーバを作る</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/5S9sryQ2DWw/5182</link>
		<comments>http://sakuratan.biz/archives/5182#comments</comments>
		<pubDate>Sat, 24 Dec 2011 09:17:35 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[メールサーバ]]></category>
		<category><![CDATA[Dovecot]]></category>
		<category><![CDATA[Postfix]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5182</guid>
		<description><![CDATA[Postfix と Dovecot でさくらVPS上にメールサーバを動かしてみましたので設定例を置いときます。 Postfix は SMTP サーバでメールを送る部分の担当、Dovecot は POP3/IMAP サーバでクライアントからメールを見る部分の担当です。完結したメールサーバとして動かすには両方必要になります。 設定方針は以下の3点です。 バーチャルメールボックスの設定を行い Unix ... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5182">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>Postfix と Dovecot でさくらVPS上にメールサーバを動かしてみましたので設定例を置いときます。</p>
<p>Postfix は SMTP サーバでメールを送る部分の担当、Dovecot は POP3/IMAP サーバでクライアントからメールを見る部分の担当です。完結したメールサーバとして動かすには両方必要になります。</p>
<p>設定方針は以下の3点です。</p>
<ol>
<li>バーチャルメールボックスの設定を行い Unix ユーザーを作らなくてもメールを受信できるように設定します。</li>
<li>なるたけセキュリティ的に硬めにしたかったので、自サーバ宛のメールの配送と、サブミッションポート経由で SSL + SMTP AUTH で認証されたクライアントからの外部へのリレーのみを許可します。</li>
<li>バーチャルメールボックスのパスワード管理は Dovecot で一元管理します。（Postfix での SMTP AUTH の認証時のアカウント管理に Dovecot を使うという意味です。Postfix と Dovecot で別々にパスワード管理する方法もありますがぶっちゃけ面倒くさいので。）</li>
</ol>
<p>さくらVPSっつーか CentOS 上で Postfix と Dovecot を設定する例はググったら沢山でてきますので、違う方法の設定が必要な場合は適当にお調べください。つーことで本題に突入。</p>
<h3>パッケージのインストール</h3>
<p>yum から postfix と dovecot をインスコします。cyrus-sasl-md5 は SMTP 認証等で CRAM-MD5 による認証を有効にする場合に必要です。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">yum install</span> postfix dovecot cyrus-sasl-md5</div></div>
<p>sendmail とか他のメールサーバを外向けの設定で運用していない場合はいきなり postfix を有効にして問題ありませんので、その前提で話を進めます。</p>
<p>CentOS をインストールした状態では sendmail が動いていますので落とします。以下のように chkconfig で確認して on になっていたら、</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ chkconfig <span style="color: #660033;">--list</span> <span style="color: #c20cb9; font-weight: bold;">sendmail</span><br />
<span style="color: #c20cb9; font-weight: bold;">sendmail</span> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">0</span>:off &nbsp; <span style="color: #000000;">1</span>:off &nbsp; <span style="color: #000000;">2</span>:on &nbsp; &nbsp;<span style="color: #000000;">3</span>:on &nbsp; &nbsp;<span style="color: #000000;">4</span>:on &nbsp; &nbsp;<span style="color: #000000;">5</span>:on &nbsp; &nbsp;<span style="color: #000000;">6</span>:off</div></div>
<p>sendmail を止めてから postfix を起動します。ついでに chkconfig でサーバリブート時に postfix が起動するようにします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sendmail</span> stop<br />
$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>postfix reload<br />
$ chkconfig <span style="color: #c20cb9; font-weight: bold;">sendmail</span> off<br />
$ chkconfig postfix on</div></div>
<hr class="linebreak">
<p>続けて alternatives で（サーバからのメール送信に使われる） sendmail コマンドを postfix に変更します。</p>
<p>現代的な Unix 系のシステムでは sendmail というメールサーバと sendmail というコマンドは別物として扱われており（元々は sendmail メールサーバに sendmail コマンドが付いていたのですが、sendmail コマンドを呼び出しているアプリケーションプログラムが多々存在するためメールサーバを変更する際に都合が悪いので、コマンドを分けた形です）。</p>
<p>CentOS ではメールを送信するために使う sendmail コマンドは alternatives で指定されたコマンドへのシンボリックリンクとなっています。</p>
<p>以下のように alternatives を実行すると、sendmail コマンドを実行した際に sendmail.postfix （Postfix の sendmail コマンド）が実行されるようになります。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ alternatives <span style="color: #660033;">--config</span> mta<br />
<br />
There are <span style="color: #000000;">2</span> programs <span style="color: #c20cb9; font-weight: bold;">which</span> provide <span style="color: #ff0000;">'mta'</span>.<br />
<br />
&nbsp; Selection &nbsp; &nbsp;Command<br />
<span style="color: #660033;">-----------------------------------------------</span><br />
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>sendmail.sendmail<br />
&nbsp; &nbsp;<span style="color: #000000;">2</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>sendmail.postfix<br />
<br />
Enter to keep the current selection<span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span>, or <span style="color: #7a0874; font-weight: bold;">type</span> selection number: <span style="color: #000000;">2</span></div></div>
<hr class="linebreak">
<p>以上が終わったらローカル配送できてるかテストしてみます。（別にしなくても良いですけど早めに問題見つけといた方が楽ですし…）</p>
<p>てことで適当なユーザー（以下の例では root）でログインして適当なユーザーにメールを送ってみます。（シェルから sendmail コマンドを実行すればメールを送れます。sendmail コマンドを実行する際、&#8221;.&#8221; だけの行を入力するとメールが送信されます。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sendmail</span> root<br />
From: root<br />
To: root<br />
Subject: <span style="color: #7a0874; font-weight: bold;">test</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">test</span><br />
.</div></div>
<p>送ったメールは（宛先のユーザーでログインして）mail コマンドで見れます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ mail<br />
Mail version <span style="color: #000000;">8.1</span> <span style="color: #000000;">6</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">6</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">93</span>. &nbsp;Type ? <span style="color: #000000; font-weight: bold;">for</span> help.<br />
<span style="color: #ff0000;">&quot;/var/spool/mail/root&quot;</span>: <span style="color: #000000;">1</span> message <span style="color: #000000;">1</span> new<br />
<span style="color: #000000; font-weight: bold;">&gt;</span>N &nbsp;<span style="color: #000000;">1</span> root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakur &nbsp;Fri Dec <span style="color: #000000;">16</span> 00:<span style="color: #000000;">33</span> &nbsp;<span style="color: #000000;">14</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">466</span> &nbsp; <span style="color: #ff0000;">&quot;test&quot;</span><br />
<span style="color: #000000; font-weight: bold;">&amp;</span> <br />
Message <span style="color: #000000;">1</span>:<br />
From root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp &nbsp;Fri Dec <span style="color: #000000;">16</span> 00:<span style="color: #000000;">33</span>:<span style="color: #000000;">13</span> <span style="color: #000000;">2011</span><br />
X-Original-To: root<br />
Delivered-To: root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp<br />
From: root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp<br />
To: root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp<br />
Subject: <span style="color: #7a0874; font-weight: bold;">test</span><br />
Date: Fri, <span style="color: #000000;">16</span> Dec <span style="color: #000000;">2011</span> 00:<span style="color: #000000;">33</span>:00 +0900 <span style="color: #7a0874; font-weight: bold;">&#40;</span>JST<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">test</span><br />
<br />
<span style="color: #000000; font-weight: bold;">&amp;</span> q<br />
Saved <span style="color: #000000;">1</span> message <span style="color: #000000; font-weight: bold;">in</span> mbox</div></div>
<p>メールが届いてなかったら /var/log/maillog を見て問題を探してください。（上記の設定内容でローカル配送のメールが届くのが遅れたりすることは基本的にありませんので「届いてなかった＝問題がある」と判断してもらって結構です。）</p>
<h3>Postfix と Dovecot の設定</h3>
<p>パスワード管理を共有する関係上、両方とも動いてから動作確認する方が速いと思いますので、一気に Postfix と Dovecot の設定を行います。</p>
<p>例示のため、バーチャルメールボックスに使用するドメインを example.com、バーチャルメールボックスに追加するメールアドレスを test@example.com として記述しています。実際の環境に合わせて読み替えてください。</p>
<h4>バーチャルメールボックス管理ユーザーの作成</h4>
<p>最初にバーチャルメールボックスを読み書きするための Unix ユーザーを作ります。（以下の例では vmail ユーザーを使います。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ groupadd <span style="color: #660033;">-g</span> <span style="color: #000000;">10000</span> vmail<br />
$ useradd <span style="color: #660033;">-u</span> <span style="color: #000000;">10000</span> <span style="color: #660033;">-g</span> <span style="color: #000000;">10000</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail <span style="color: #660033;">-r</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>nologin vmail<br />
$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail<br />
$ <span style="color: #c20cb9; font-weight: bold;">chown</span> vmail:vmail <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail<br />
$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">700</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail</div></div>
<p>UID/GID は 10000 以外でも構いませんが、Postfix/Dovecot を設定する際に ID を指定する必要があるので UID/GID の番号を覚えておいてください。</p>
<h4>SSL 自己証明書と秘密鍵の作成</h4>
<p>Postfix/Dovecot ともに SSL を有効にするため、自己証明書と秘密鍵を作成します。（Dovecot に example.com の自己証明書と秘密鍵が付いてるのですが一応自サーバ用に作ります。）</p>
<p>/etc/pki/tls/certs ディレクトリの Makefile で秘密鍵を含む自己証明書を簡単に作れるのですが、後述する DER 形式ファイルを作成するため openssl コマンドを直接実行して作成します。</p>
<p>コマンドを実行すると証明書のパラメータを質問されますが、Common Name に VPS サーバのサーバ名（以下の例では www9999u.sakura.ne.jp）を入力し、それ以外の項目はデフォルトで構いません（ちゃんと入力しても良いですけど）。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>pki<span style="color: #000000; font-weight: bold;">/</span>tls<span style="color: #000000; font-weight: bold;">/</span>certs<br />
$ openssl req <span style="color: #660033;">-new</span> <span style="color: #660033;">-x509</span> <span style="color: #660033;">-nodes</span> <span style="color: #660033;">-days</span> <span style="color: #000000;">365</span> <span style="color: #660033;">-out</span> mail.crt <span style="color: #660033;">-keyout</span> mail.key<br />
Generating a <span style="color: #000000;">1024</span> bit RSA private key<br />
....++++++<br />
.......................................................++++++<br />
writing new private key to <span style="color: #ff0000;">'mail.key'</span><br />
<span style="color: #660033;">-----</span><br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter <span style="color: #ff0000;">'.'</span>, the field will be left blank.<br />
<span style="color: #660033;">-----</span><br />
Country Name <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">2</span> letter code<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>GB<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
State or Province Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>full name<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Berkshire<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Locality Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, city<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Newbury<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Organization Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, company<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>My Company Ltd<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Organizational Unit Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, section<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Common Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, your name or your server<span style="color: #ff0000;">'s hostname) []:www9999u.sakura.ne.jp<br />
Email Address []:<br />
$chmod 600 mail.key</span></div></div>
<p>mail.crt が証明書ファイル、mail.key が秘密鍵ファイルです。証明書の有効期限は365日となっています。もっと長くしたい場合は -days オプションで増やしてください。</p>
<p>Outlook Express や Entourage、AppleMail などのクライアントを使っている場合、証明書をクライアントにインストールしないと警告が表示されるらしいので、インストール用の DER 形式の証明書を作成します。以下のコマンドで作成される mail.der をインストールしたら良いらしいです。（が、この辺は試してないのでうまくいかなかったら<a href="http://vine-linux.ddo.jp/linux/mail/inport.php">証明書のインポート &#8211; メール(Postfix) &#8211; 自宅サーバーの構築 &#8211; 自宅サーバーでやってみよう！！</a>等を参考にしてください。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span>openssl x509 <span style="color: #660033;">-inform</span> pem <span style="color: #660033;">-in</span> mail.crt <span style="color: #660033;">-outform</span> der <span style="color: #660033;">-out</span> mail.der</div></div>
<h4>Dovecot の設定</h4>
<p>Dovecot 側でパスワードを一元管理する関係上、こちらの設定を先に行います。Dovecot の設定ファイル /etc/dovecot.conf を編集し、アカウント管理用の /etc/dovecot-passwd ファイルを作成します。</p>
<p>まず Dovecot の設定ファイル /etc/dovecot.conf を編集します。ssl_cert_file と ssl_key_file は先ほど作った自己証明書と秘密鍵ファイルです。その他の設定は auth default セクション中に足します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000099;">ssl_cert_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.crt</span><br />
<span style="color: #000099;">ssl_key_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.key</span><br />
<br />
auth default <span style="">&#123;</span><br />
&nbsp; <span style="color: #000099;">mechanisms</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> cram-md5 digest-md5 plain login</span><br />
&nbsp; passdb passwd-file <span style="">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000099;">args</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/dovecot-passwd</span><br />
&nbsp; <span style="">&#125;</span><br />
&nbsp; socket listen <span style="">&#123;</span><br />
&nbsp; &nbsp; client <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">path</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /var/spool/postfix/private/auth</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">mode</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 0660</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">user</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> postfix</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">group</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> postfix</span><br />
&nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; <span style="">&#125;</span><br />
&nbsp; userdb static <span style="">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000099;">args</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> uid=10000 gid=10000 home=/var/spool/vmail/%d/%n</span><br />
&nbsp; <span style="">&#125;</span><br />
<span style="">&#125;</span></div></div>
<p>実際の dovecot.conf にはコメントが大量に入ってて修正箇所を探すのが面倒かもしれませんが、ssl_cert_file、ssl_key_file、mechanisms は元からありますので書き換え、その他は auth default セクションの最後の方に足してもらうのが速いと思います。</p>
<p>設定ファイルの詳細については <a href="http://wiki.dovecot.org/FrontPage">Dovecot Wiki</a> をご覧ください。</p>
<hr class="linebreak">
<p>dovecot.conf の編集が終わったら /etc/dovecot-passwd ファイルを作成します。Dovecot をインストールした状態ではこのファイルは存在しませんので新規作成します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">test@example.com:<span style="">&#123;</span>HMAC-MD5<span style="">&#125;</span>dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3<br />
test2@example.com:<span style="">&#123;</span>HMAC-MD5<span style="">&#125;</span>dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3</div></div>
<p>dovecot-passwd ファイルには、ユーザー名と暗号化されたパスワードを &#8220;:&#8221; で区切って記述します。「ユーザー名＝メールアドレス」にした方がメールクライアントの設定が楽なのでそうしてますが、ユーザー名部分はメールアドレスでないとダメって訳ではありません。</p>
<p>暗号化されたパスワードは dovecotpw コマンドで取得できますのでコピペします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ dovecotpw <br />
Enter new password: <br />
Retype new password: <br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span>HMAC-MD5<span style="color: #7a0874; font-weight: bold;">&#125;</span>dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3</div></div>
<p>dovecot-passwd ファイルにはユーザーIDやホームディレクトリなど passwd ファイルと似たような項目を指定することもできるのですが、Postfix と連携するだけなら userdb static で指定した方が速いと思いますので省略します。詳しくは <a href="http://wiki.dovecot.org/AuthDatabase/PasswdFile">AuthDatabase/PasswdFile &#8211; Dovecot Wiki</a> をご覧ください。</p>
<hr class="linebreak">
<p>設定が終わったら dovecot サーバを起動します。ついでに chkconfig でサーバリブート時に dovecot が起動するように設定しておきます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>dovecot start<br />
$ chkconfig dovecot on</div></div>
<h4>Postfix の設定</h4>
<p>Postfix の設定では、Postfix 全体の設定ファイル /etc/postfix/main.cf とサブプロセス別の設定ファイル /etc/postfix/master.cf を編集し、バーチャルメールボックス管理用ファイル /etc/postfix/vmailbox を作成します。</p>
<p>まず /etc/postfix/main.cf を修正します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000099;">inet_interfaces</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> all</span><br />
<br />
# SASL<br />
#smtpd_sasl_auth_enable <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> yes</span><br />
<span style="color: #000099;">smtpd_recipient_restrictions</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> permit_mynetworks, reject_unauth_destination</span><br />
#broken_sasl_auth_clients <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> yes</span><br />
<br />
<span style="color: #000099;">smtpd_sasl_type</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> dovecot</span><br />
<span style="color: #000099;">smtpd_sasl_path</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> private/auth</span><br />
<span style="color: #000099;">smtpd_sasl_security_options</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> noanonymous</span><br />
<br />
# TLS<br />
<span style="color: #000099;">smtpd_use_tls</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> yes</span><br />
<span style="color: #000099;">smtpd_tls_key_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.key</span><br />
<span style="color: #000099;">smtpd_tls_cert_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.csr</span><br />
<br />
# Virtual<br />
<span style="color: #000099;">virtual_mailbox_domains</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> example.com</span><br />
<span style="color: #000099;">virtual_mailbox_base</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /var/spool/vmail</span><br />
<span style="color: #000099;">virtual_mailbox_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> hash:/etc/postfix/vmailbox</span><br />
<span style="color: #000099;">virtual_minimum_uid</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 100</span><br />
<span style="color: #000099;">virtual_uid_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> static:10000</span><br />
<span style="color: #000099;">virtual_gid_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> static:10000</span><br />
<span style="color: #000099;">virtual_alias_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> hash:/etc/postfix/virtual</span></div></div>
<p>inet_interfaces は main.cf に元から設定が存在するので書き換えてください。他の項目は存在しないと思いますので、適当な場所に追加してください。</p>
<p>#smtpd_sasl_auth_enable = yes の行はコメントアウトしたままにしておいてください。後ほど master.cf を編集する際に、サブミッションポートからの接続時のみ smtpd_sasl_auth_enable = yes になるように設定します。設定ファイルを見たとき分かりにくいと思いますので、あえてコメントアウトで残しておいてもらった方が良いと思います。（まあコメントアウトせずに何も書かなくても結構ですけど。）</p>
<p>古い Outlook を使っている場合は、broken_sasl_auth_clients = yes を有効にする必要があります。SMTP AUTH に関するバグがあるそうです。うちでは Outlook は使ってないのでコメントアウトしてます。</p>
<p>バーチャルメールボックスのメールアドレスに使用するドメインは virtual_mailbox_domains に指定します。上の例では example.com になっていますので、実際に使用するドメインを記述してください。カンマ区切りで複数指定することもできます。</p>
<p>virtual_mailbox_domains に指定するドメインは mydestination と重複しないようにしてください。デフォルトで mydestination は $myhostname, localhost.$mydomain, localhost になっており、さくら VPS の場合 myhostname は www9999u.sakura.ne.jp とかになります。</p>
<p>myhostname を example.com にして mydestination を空にすることもできますが、cron 等システム内部からのメールはバーチャルメールボックスではなくローカル配送にした方が良いと思いますので、mydestination や myhostname はデフォルトのままの方が良いと思います。それとメールサーバの DNS の逆引き設定を行っていないと受信を拒否するサーバもあり、sakura.ne.jp のホストは逆引き可能ですので、その辺のトラブルを避けるためにもこの設定の方が楽だと思います。まあこの辺に色々うんちくのある方はご自由にどうぞ、っつーかそういう人はこんなブログ見ながら設定してはいけませんw</p>
<p>virtual_mailbox_base を別の場所に変えてもオッケーですが、あらかじめディレクトリが存在している必要があり、virtual_uid_maps で指定されるユーザーから制御可能である必要があります。この辺の設定は先ほど vmail ユーザーを作った際に行っていますが、変更する際は Postfix の要求を満たすよう適宜設定を行ってください。</p>
<p>smtpd_tls_key_file と smtpd_tls_cert_file には先ほど作った自己証明書と秘密鍵ファイルを指定します。</p>
<hr class="linebreak">
<p>main.cf の設定が終わったら /etc/postfix/master.cf を編集します。</p>
<p>以下の submission ポートの設定がコメントアウトされてると思いますので、有効にします。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">submission inet n &nbsp; &nbsp; &nbsp; - &nbsp; &nbsp; &nbsp; n &nbsp; &nbsp; &nbsp; - &nbsp; &nbsp; &nbsp; - &nbsp; &nbsp; &nbsp; smtpd<br />
&nbsp; -o smtpd_enforce_tls<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">yes</span><br />
&nbsp; -o smtpd_sasl_auth_enable<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">yes</span><br />
&nbsp; -o smtpd_client_restrictions<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">permit_sasl_authenticated,reject</span><br />
-o smtpd_recipient_restrictions<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">permit_sasl_authenticated,reject_unauth_destination</span></div></div>
<hr class="linebreak">
<p>最後に /etc/postfix/vmailbox を編集して Postfix の設定は終わりです。Postfix をインストールした状態ではこのファイルは存在しませんので新規作成します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">test@example.com &nbsp; &nbsp; &nbsp; &nbsp;example.com/test/Maildir/<br />
test2@example.com &nbsp; &nbsp; &nbsp; example.com/test2/Maildir/</div></div>
<p>vmailbox ファイルにはバーチャルメールボックスのメールアドレスとメールボックスのパスを空白（タブ）区切りで記述していきます。</p>
<p>メールボックスのパスは virtual_mailbox_base からの相対パスを指定します。上の例ですと、test@example.com 宛てのメールは /var/spool/vmail/example.com/test/Maildir/ に Maildir 形式で保存されます。</p>
<p>Postfix はメールボックスのパスの末尾を / で終えると Maildir 形式、/ 無しで終えると mbox 形式で保存します。何言ってるか分からない人はとりあえず Maildir 形式でえーと思います。</p>
<p>編集が終わったら postmap コマンドでデータベースに変換します。これを実行しないと Postfix が起動しません。virtual ファイルは転送設定用のファイルで、こちらもデータベースが必要ですので一緒に postmap します。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ postmap <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>vmailbox<br />
$ postmap <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>virtual</div></div>
<hr class="linebreak">
<p>設定が終わったら postfix をリブートします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>postfix reload</div></div>
<h3>DNS</h3>
<p>メールサーバを運用する際は、DNS に MX レコードを用意しておいた方が良いです。</p>
<p>A レコードだけでも運用できますが、DNS の二度引きが発生したりするので、バーチャルメールアドレスでの送受信に使用する MX レコードを作成します。</p>
<p>ドメインの登録を Value Domain で行っている場合は、以下のように設定してください。ドメインが example.com、サーバの IP アドレスが 192.0.2.1、メール送信用のホストが mail.example.com、の場合の設定例です。mail.example.com ではなく example.com を MX に指定しても良いのですが、メールサーバだけ移転とかする際にこの方が楽なので別ホスト扱いにしておいた方が良いと思います。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">a @ 192.0.2.1<br />
a mail 192.0.2.1<br />
mx mail.example.com. <span style="">10</span></div></div>
<p>なお、新規にメールサーバを立てる（誰にもメールアドレスを教えていない状態の）場合は、メールサーバの設定より先に DNS の設定を行っておいても構いません。</p>
<h3>クライアントからの送信</h3>
<p>以上でメールサーバの設定は完了です。あとはクライアントの設定をして終わりです。</p>
<p>クライアントの設定ですが、以下のような感じになります。（メールサーバを mail.example.com、メールアドレスを test@example.com にした場合。）</p>
<dl>
<dt><b>SMTP</b></dt>
<dd>
<table>
<tr>
<th>ホスト</th>
<td>mail.example.com</td>
</tr>
<tr>
<th>ポート</th>
<td>587</td>
</tr>
<tr>
<th>SMTP AUTH ユーザー</th>
<td>test@example.com</td>
</tr>
<tr>
<th>SMTP AUTH パスワード</th>
<td>dovecot-passwd のパスワード</td>
</tr>
<tr>
<th>その他</th>
<td>STARTLS を使用して SSL を有効にする必要あり</td>
</tr>
</table>
</dd>
<dt><b>POP3</b></dt>
<dd>
<table>
<tr>
<th>ホスト</th>
<td>mail.example.com</td>
</tr>
<tr>
<th>ポート</th>
<td>110 （POP3S を使用する場合は 995）</td>
</tr>
<tr>
<th>ユーザー</th>
<td>test@example.com</td>
</tr>
<tr>
<th>パスワード</th>
<td>dovecot-passwd のパスワード</td>
</tr>
</table>
</dd>
<dt><b>IMAP</b></dt>
<dd>
<table>
<tr>
<th>ホスト</th>
<td>mail.example.com</td>
</tr>
<tr>
<th>ポート</th>
<td>143 （IMAPS を使用する場合は 993）</td>
</tr>
<tr>
<th>ユーザー</th>
<td>test@example.com</td>
</tr>
<tr>
<th>パスワード</th>
<td>dovecot-passwd のパスワード</td>
</tr>
</table>
</dd>
</dl>
<p>クライアント別の設定例はちょっと書ききれませんので、<a href="http://www.atmarkit.co.jp/fwin2k/win2ktips/798submssn/submssn.html">サブミッション・ポートを利用してメールを送信する － ＠IT</a> や <a href="http://www.atmarkit.co.jp/fwin2k/win2ktips/1100mailssl/mailssl.html">メールの送受信でSSLを利用して暗号化する－ ＠IT</a> を参考にお試しください。</p>
<h3>実運用に際して</h3>
<p>ほったらかしの運用だとじきにクラックされる可能性もありますので、実際に運用する際はログ監視ぐらいは最低限行っておいた方が良いと思います。</p>
<p>今日のネタはメールサーバの設定っつーことですのでログ監視ツールの使い方は説明しませんが、<a href="http://sourceforge.net/projects/swatch/">swatch</a> とか使ったら良いと思います。</p>
<p>んでわ</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=5S9sryQ2DWw:2y5T4TCtcDI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=5S9sryQ2DWw:2y5T4TCtcDI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=5S9sryQ2DWw:2y5T4TCtcDI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=5S9sryQ2DWw:2y5T4TCtcDI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=5S9sryQ2DWw:2y5T4TCtcDI:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/5S9sryQ2DWw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5182/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5182</feedburner:origLink></item>
		<item>
		<title>AZlink/lookupでたまに404 NOT FOUNDが出てましたが直しました</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/BwLzDmnAlDk/5161</link>
		<comments>http://sakuratan.biz/archives/5161#comments</comments>
		<pubDate>Sat, 19 Nov 2011 08:25:28 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AZlink]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5161</guid>
		<description><![CDATA[サーバ移転時に AZlink/lookup がバグったようで、たまに 404 NOT FOUND が出るようになってました。さっき直しましたのでどぞよろしく。 　 　　　　 　ﾉ Ｌ＿＿＿_ 　　　　　　　⌒　＼　／ ＼ 　　　　　　／　（○）　（○）＼ 　　　　 ／　　　 （__人__）　　 ＼　　 　　　 　&#124;　 　 　　　&#124;::::::&#124;　　　　　&#124;　　＜本文1行ならツイッターでやれ！！ 　... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5161">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>サーバ移転時に <a href="http://sakuratan.biz/azlink/lookup/">AZlink/lookup</a> がバグったようで、たまに 404 NOT FOUND が出るようになってました。さっき直しましたのでどぞよろしく。</p>
<div class="AA">
　 　　　　 　ﾉ Ｌ＿＿＿_<br />
　　　　　　　⌒　＼　／ ＼<br />
　　　　　　／　（○）　（○）＼<br />
　　　　 ／　　　 （__人__）　　 ＼　　<br />
　　　 　|　 　 　　　|::::::|　　　　　|　　＜本文1行ならツイッターでやれ！！<br />
　　　　 ＼ 　 　 　 l;;;;;;l　　 　／l!| !<br />
　　　 　／　　　　　`ｰ&#8217;　 　　＼ |i<br />
　　　／　　　　　　　　　　ヽ !l　ヽi<br />
　　 （　　 丶- 、　　　　　　 しＥ　|そ　　ドンッ！！<br />
　　　　`ー､＿ﾉ 　 　 　 ∑　l､Ｅ ﾉ　<<br />
　　　　　　　　　　　　　　　ﾚY^Ｖ^ヽｌ
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BwLzDmnAlDk:CJ3F8W1uYjA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BwLzDmnAlDk:CJ3F8W1uYjA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BwLzDmnAlDk:CJ3F8W1uYjA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BwLzDmnAlDk:CJ3F8W1uYjA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BwLzDmnAlDk:CJ3F8W1uYjA:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/BwLzDmnAlDk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5161/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5161</feedburner:origLink></item>
		<item>
		<title>Pythonのターミナルに出力する際に文字コード関係のエラーを抑制する</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/2j9J3UP9JmE/5140</link>
		<comments>http://sakuratan.biz/archives/5140#comments</comments>
		<pubDate>Mon, 14 Nov 2011 10:06:55 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[UnicodeEncodeError]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5140</guid>
		<description><![CDATA[Python 使ってると、日本語を表示する際に処理系が勝手に文字コードを変換しようとしてエラーが出て困ったりします。 こんな感じ↓のやつです。 &#62;&#62;&#62; print u'\uffff' Traceback &#40;most recent call last&#41;: &#160; File &#34;&#60;stdin&#62;&#34;, line 1, in &#60;mo... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5140">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>Python 使ってると、日本語を表示する際に処理系が勝手に文字コードを変換しようとしてエラーが出て困ったりします。<br />
こんな感じ↓のやつです。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">print</span> u<span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\u</span>ffff'</span><br />
Traceback <span style="color: black;">&#40;</span>most recent call last<span style="color: black;">&#41;</span>:<br />
&nbsp; File <span style="color: #483d8b;">&quot;&lt;stdin&gt;&quot;</span><span style="color: #66cc66;">,</span> line <span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #66cc66;">&lt;</span>module<span style="color: #66cc66;">&gt;</span><br />
<span style="color: #008000;">UnicodeEncodeError</span>: <span style="color: #483d8b;">'euc_jp'</span> codec can<span style="color: #483d8b;">'t encode character u'</span>\uffff<span style="color: #483d8b;">' in position 0:<br />
illegal multibyte sequence</span></div></div>
<hr class="linebreak">
<p>普段は放置してるのですがちょっと真剣に対応してみることにしました。<br />
（この手の情報欲しい人はある程度 Python 詳しい人だと思いますし）グダグダ説明するような話でも無いので細かい説明は抜きで解決方法だけ書こうと思います。</p>
<ol>
<li>以下のファイルを safe_terminal.py に保存。
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">codecs</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> find_encoding<span style="color: black;">&#40;</span>fh<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> fh.<span style="color: black;">encoding</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> fh.<span style="color: black;">encoding</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">'utf-8'</span><br />
<br />
<span style="color: #808080; font-style: italic;">#error = 'ignore'</span><br />
error <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'backslashreplace'</span><br />
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span> <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">codecs</span>.<span style="color: black;">getwriter</span><span style="color: black;">&#40;</span>find_encoding<span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span><span style="color: #66cc66;">,</span> error<span style="color: black;">&#41;</span><br />
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span> <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">codecs</span>.<span style="color: black;">getwriter</span><span style="color: black;">&#40;</span>find_encoding<span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span><span style="color: #66cc66;">,</span> error<span style="color: black;">&#41;</span></div></div>
</li>
<li>print 等を使うプログラムで safe_terminal.py を import する。
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> safe_terminal<br />
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">print</span> u<span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\u</span>ffff'</span><br />
\uffff</div></div>
</li>
</ol>
<p>こんな感じで stdout / stderr に対する print や write 時に変換できない文字をバックスラッシュでエスケープするのが便利かと思います。Python に含まれるライブラリ自体を書き換える方法もありますが、サーバ何台も扱ってると面倒なのでパスって感じです。</p>
<p>変換できない文字を非表示にしたい場合は error = &#8216;ignore&#8217; に変えてください。</p>
<h3>参考にしたページ</h3>
<p><a href="http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html">PythonのUnicodeEncodeErrorを知る &#8211; HDEラボ</a><br />
<a href="http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/python/encoding.html">Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法</a></p>
<p>あじゃじゃしたーw</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=2j9J3UP9JmE:62UuM0UehkE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=2j9J3UP9JmE:62UuM0UehkE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=2j9J3UP9JmE:62UuM0UehkE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=2j9J3UP9JmE:62UuM0UehkE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=2j9J3UP9JmE:62UuM0UehkE:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/2j9J3UP9JmE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5140/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5140</feedburner:origLink></item>
		<item>
		<title>アマゾンで『なか見！検索』できる年賀状素材（2012年版）を10冊ほどピックアップしてみました</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/VO0ty0plvBM/5117</link>
		<comments>http://sakuratan.biz/archives/5117#comments</comments>
		<pubDate>Mon, 07 Nov 2011 09:01:36 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[年賀状]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5117</guid>
		<description><![CDATA[そろそろ年賀状のシーズンすねー。マジめんどくさいす。 家は毎年キャノンの素材サイトで年賀状素材をあさってるのですが、夏ごろにプリンタがぶっ壊れたんでどうしようかとお悩み中です。 とりあえずプリンタを買わないとあかんのですが、ついでに素材集を買うのも良いかなーと思いまして、アマゾンで『なか見！検索』できる年賀状素材を10冊ほどピックアップしてみました。 個人的にははやわざ年賀状2012 (インプレス... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5117">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>そろそろ年賀状のシーズンすねー。マジめんどくさいす。</p>
<p>家は毎年キャノンの素材サイトで年賀状素材をあさってるのですが、夏ごろにプリンタがぶっ壊れたんでどうしようかとお悩み中です。</p>
<p>とりあえずプリンタを買わないとあかんのですが、ついでに素材集を買うのも良いかなーと思いまして、アマゾンで『なか見！検索』できる年賀状素材を10冊ほどピックアップしてみました。</p>
<p>個人的には<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330586/sakuratan05-22/ref=nosim/" target="_blank">はやわざ年賀状2012 (インプレスムック)</a>か<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330551/sakuratan05-22/ref=nosim/" target="_blank">あでやか年賀状2012 (インプレスムック)</a>がえー感じだと思いますが、アマゾンで『なか見！検索』してもらった方が早いと思いますｗ</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330608/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/61ZUywDMsNL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="年賀状CD-ROM2012 (インプレスムック)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330608/sakuratan05-22/ref=nosim/" target="_blank">年賀状CD-ROM2012 (インプレスムック)</a><br />
超オーソドックスな年賀状素材集です。</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330594/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/61DhOyWTryL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="大人かわいいデジカメ年賀状2012 (インプレスムック)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330594/sakuratan05-22/ref=nosim/" target="_blank">大人かわいいデジカメ年賀状2012 (インプレスムック)</a><br />
写真フレームみたいな素材が多かったです。</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330543/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51n4WBBkEfL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="キラリ☆と輝くおしゃれな年賀状2012 (インプレスムック)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330543/sakuratan05-22/ref=nosim/" target="_blank">キラリ☆と輝くおしゃれな年賀状2012 (インプレスムック)</a><br />
水彩画っぽい年賀状が多いです。</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4796684182/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/612AgJYFYwL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="おしゃれ年賀状2012 (宝島MOOK)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4796684182/sakuratan05-22/ref=nosim/" target="_blank">おしゃれ年賀状2012 (宝島MOOK)</a><br />
グロくない犬カレー風素材ですたｗ</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844362305/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/61Ds1IFPIVL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="デザイナーズ年賀状CD-ROM2012 (インプレスムック エムディエヌ・ムック)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844362305/sakuratan05-22/ref=nosim/" target="_blank">デザイナーズ年賀状CD-ROM2012 (インプレスムック エムディエヌ・ムック)</a><br />
カラフル折紙年賀状、切り絵年賀状等、デザインが凝ったのが多いです。</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4796684166/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/61lpPZeqGLL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="世界一簡単にできる年賀状2012 (宝島MOOK)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4796684166/sakuratan05-22/ref=nosim/" target="_blank">世界一簡単にできる年賀状2012 (宝島MOOK)</a><br />
キャノンの年賀状素材集にあるような感じの多数収録ですた(´･ω･｀)</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4796684204/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/61jo9EkF16L._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="上撰美麗年賀状 和 2012 (宝島MOOK)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4796684204/sakuratan05-22/ref=nosim/" target="_blank">上撰美麗年賀状 和 2012 (宝島MOOK)</a><br />
ピカピカテカテカ、いかにもデザイナーが作ったって感じで。</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330586/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/610zeUeUoaL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="はやわざ年賀状2012 (インプレスムック)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330586/sakuratan05-22/ref=nosim/" target="_blank">はやわざ年賀状2012 (インプレスムック)</a><br />
値段も安くてバランス良い感じの素材集です。</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4816351191/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/61vL7f%2Bt9qL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="2012年版 年賀状データ集pack PREMIUM" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4816351191/sakuratan05-22/ref=nosim/" target="_blank">2012年版 年賀状データ集pack PREMIUM</a><br />
文字入れしやすい感じの素材集。</p>
<hr class="linebreak">
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330551/sakuratan05-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/614jiJannOL._PIsitb-sticker-arrow-big,TopRight,35,-76_OU09_.jpg" alt="あでやか年賀状2012 (インプレスムック)" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844330551/sakuratan05-22/ref=nosim/" target="_blank">あでやか年賀状2012 (インプレスムック)</a><br />
和風です。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=VO0ty0plvBM:IiP-sZRMs_g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=VO0ty0plvBM:IiP-sZRMs_g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=VO0ty0plvBM:IiP-sZRMs_g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=VO0ty0plvBM:IiP-sZRMs_g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=VO0ty0plvBM:IiP-sZRMs_g:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/VO0ty0plvBM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5117</feedburner:origLink></item>
		<item>
		<title>大方の読者の予想どおりAZlink-TinyWidgetがバグってたのでv1.0.3になりました</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/tXXOr5Vp3Lk/5109</link>
		<comments>http://sakuratan.biz/archives/5109#comments</comments>
		<pubDate>Mon, 31 Oct 2011 08:47:39 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AZlink]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5109</guid>
		<description><![CDATA[先ほどブログでリリース告知した sakuratan/AZlink-TinyWidget ですが、早速というか予想通りというか、バグってましたので直しました。古いのは変数を typo してて自動更新がちゃんと動きませんorz github にバージョン1.0.3をうpってます。ここから新しい版のソースをダウンロードしてファイルを上書きしてください。（ファイルを上書きしたらバグは直ります。） 　　　 ... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5109">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>先ほどブログでリリース告知した <a href="https://github.com/sakuratan/AZlink-TinyWidget">sakuratan/AZlink-TinyWidget</a> ですが、早速というか予想通りというか、バグってましたので直しました。古いのは変数を typo してて<b>自動更新がちゃんと動きません</b>orz</p>
<p>github にバージョン1.0.3をうpってます。<a href="https://github.com/sakuratan/AZlink-TinyWidget/downloads">ここ</a>から新しい版のソースをダウンロードしてファイルを上書きしてください。（ファイルを上書きしたらバグは直ります。）</p>
<div class="AA">
　　　 　　(~)<br />
　　　 γ´⌒｀ヽ<br />
　 　　 {i:i:i:i:i:i:i:i:}<br />
　　　 （　´・ω・）　ごめんね、ごめんね<br />
　　 　 (:::O┬O<br />
　　◎-ヽJ┴◎　ｷｺｷｺ
</div>
<p>P.S.<br />
とかなんとか言ってる間にバージョン1.0.4になってしまいました。<br />
ソース公開してるのでこの辺はこんな感じでおながいします。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=tXXOr5Vp3Lk:hn6BYbjVnzE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=tXXOr5Vp3Lk:hn6BYbjVnzE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=tXXOr5Vp3Lk:hn6BYbjVnzE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=tXXOr5Vp3Lk:hn6BYbjVnzE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=tXXOr5Vp3Lk:hn6BYbjVnzE:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/tXXOr5Vp3Lk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5109/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5109</feedburner:origLink></item>
		<item>
		<title>AZlink/Widgetの停止／オープンソース版AZlink-TinyWidgetの公開</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/AH4HbpVAjEA/5087</link>
		<comments>http://sakuratan.biz/archives/5087#comments</comments>
		<pubDate>Mon, 31 Oct 2011 06:25:42 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AZlink]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5087</guid>
		<description><![CDATA[前々から告知してますが、もうちょいしたら AZlink/Widget を止めます。 まだ使われてる方がいるようですが消えますのであしからず、あしからず。 ソースくれって方が何人かいましたので、AZlink/Widget のオープンソース版として AZlink-TinyWidget を公開しました。 github に置いてます。MIT ライセンスです。 sakuratan/AZlink-TinyWi... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5087">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>前々から告知してますが、もうちょいしたら AZlink/Widget を止めます。<br />
まだ使われてる方がいるようですが消えますのであしからず、あしからず。</p>
<p>ソースくれって方が何人かいましたので、AZlink/Widget のオープンソース版として AZlink-TinyWidget を公開しました。<br />
github に置いてます。MIT ライセンスです。<br />
<a href="https://github.com/sakuratan/AZlink-TinyWidget">sakuratan/AZlink-TinyWidget &#8211; GitHub</a></p>
<p>ダウンロードは <a href="https://github.com/sakuratan/AZlink-TinyWidget/downloads">Downloads for sakuratan&#8217;s AZlink-TinyWidget &#8211; GitHub</a> からできます。<br />
ブログ書くの面倒だったので昨日の夜中に Twitter で先に告知したのですが、そん時からバージョン上がってます。<br />
バージョン1.0.1をインスコされた方はバージョン1.0.2に上げてください。<br />
1.0.1には割としょうもないバグがありましたのでアーカイブも削除しました。</p>
<hr class="linebreak">
<p>AZlink/Widget と AZlink-TinyWidget の主な違いは↓みたいな感じです。</p>
<ul>
<li>node 指定しかできません。人気の商品とかのブログパーツのみの表示となります。機能的には AZlink/Widget (embed) と同じです。</li>
<li>JSONP じゃなくて JSON で実装しています。ほとんどの人は他人向けにウェブサービスで提供したい訳じゃないと思いますので、ドメイン越しでブログパーツ表示できないようにしました。</li>
</ul>
<p>グループサイトを持ってる人とかは JSONP に対応してる方が便利かもしれませんのでおいおいサポートしようと思ってますが、停止前にリリースしときたかったのでとりあえずこれでおながいします。</p>
<hr class="linebreak">
<p>ちなみに AZlink-TinyWidget のサーバサイドスクリプトは PHP になってます。<br />
GAE が Python なんで GAE 固有の部分を書き換えてリリースしても良かったのですが、Python のウェブアプリとか要らん人がほとんどだろうと思いまして PHP にしました。要はサーバ側はまったく別物です。</p>
<p>ユーザーさんの中にはかなりアクセスの多いサイトもありましたのでそれなりに高速に動くように作っているつもりですが、どうなることでしょうw</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=AH4HbpVAjEA:5YMOlKEevp0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=AH4HbpVAjEA:5YMOlKEevp0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=AH4HbpVAjEA:5YMOlKEevp0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:KwTdNBX3Jqk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=AH4HbpVAjEA:5YMOlKEevp0:KwTdNBX3Jqk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=AH4HbpVAjEA:5YMOlKEevp0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=AH4HbpVAjEA:5YMOlKEevp0:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/AH4HbpVAjEA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5087/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5087</feedburner:origLink></item>
		<item>
		<title>10/31にAZlink/widgetとAZlink/widget (embed) はサービス終了します</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/BHGLvsm0dtM/5069</link>
		<comments>http://sakuratan.biz/archives/5069#comments</comments>
		<pubDate>Wed, 19 Oct 2011 12:55:37 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AZlink]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5069</guid>
		<description><![CDATA[GAE の料金改定に伴い AZlink/widget を別システムに移行していたのですが（GAE価格改訂（予定）で俺爆死（予定）、おまいらどーよ？、AZlink/widgetの仕様が変わります／なんでしばらくテストします参照）、テストの結果サービス維持は困難と判断しサービスを終了することに決めました。 判断理由ですがだいたい↓みたいな感じです。 テストの結果、VPSだと23台ぐらいは要りそうな感じ... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5069">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>GAE の料金改定に伴い AZlink/widget を別システムに移行していたのですが（<a href="http://sakuratan.biz/archives/4755">GAE価格改訂（予定）で俺爆死（予定）、おまいらどーよ？</a>、<a href="http://sakuratan.biz/archives/5051">AZlink/widgetの仕様が変わります／なんでしばらくテストします</a>参照）、テストの結果サービス維持は困難と判断しサービスを終了することに決めました。</p>
<p>判断理由ですがだいたい↓みたいな感じです。</p>
<ol>
<li>テストの結果、VPSだと23台ぐらいは要りそうな感じなことが判明</li>
<li>AZlink/widget のアクセスが今も増加傾向で将来的にサーバの増設が必要</li>
</ol>
<p>サービス内容を若干変えて運用する方向で新しいシステムでテストとかもしていたのですが、現在のアクセス数（2500万／日ぐらい）をさばくために上の台数のサーバがとりあえず必要で、新システムにするにしても一旦廃止して別ドメインで運用しないと金銭的に厳しい、というのが一番大きな理由です。</p>
<hr class="linebreak">
<p>本当言うと運用できる方法が無いかもうちょい色々試してみたかったのですが、いきなり明日やめますって感じだと今使っているユーザーさんも困ると思いますので前もって告知するために早めに決めることにしました。</p>
<p>ということで、<b>AZlink/widget は 10/31 をもって終了</b>いたします。</p>
<p>AZlink/widget を運用している azlink.sakuratan.biz ドメインを削除します。10/31 以降はアクセスできなくなります。<br />
現在ご利用の方は <b>10/31 までにブログパーツを取り除いてください</b>。</p>
<hr class="linebreak">
<p>AZlink/widget と似たようなブログパーツを運用しているところもちらほらありましたのでリンクを貼っときます。<br />
移行される方はどぞー。</p>
<ul>
<li><a href="http://amaziiii.syoh.jp/">AMAZiiii Amazonアフィリエイト用無料ブログパーツ</a></li>
<li><a href="http://amazlink.keizoku.com/">Amazonアフィリエイトリンク作成ツール～AmazLink～</a></li>
<li><a href="http://s6464.sakura.ne.jp/blogparts/amazon/">amazolute</a></li>
</ul>
<hr class="linebreak">
<p>最後に、AZlink/widget を可愛がってくださったユーザーの皆様、どうもありがとうございました。<br />
サービス継続を期待されていた方、ご期待にそえず誠に申し訳ないです。</p>
<hr class="linebreak">
<p>【後から追加】<br />
書くの忘れていましたが、AZlink/widget (embed) も同時にサービス停止します。中身同じですので…</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BHGLvsm0dtM:OzILDZxj9d8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BHGLvsm0dtM:OzILDZxj9d8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BHGLvsm0dtM:OzILDZxj9d8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=BHGLvsm0dtM:OzILDZxj9d8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=BHGLvsm0dtM:OzILDZxj9d8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/BHGLvsm0dtM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5069/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5069</feedburner:origLink></item>
		<item>
		<title>AZlink/lookupのキャッシュ保持期限を変更しました</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/C1XovBQn9gg/5067</link>
		<comments>http://sakuratan.biz/archives/5067#comments</comments>
		<pubDate>Sat, 15 Oct 2011 14:31:35 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AZlink]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5067</guid>
		<description><![CDATA[AZlink/lookup のキャッシュ保持期限を1時間に変更しました。 ブログパーツを作成しようとしたけど画像が無かった場合、1時間経ってから再作成すると画像が表れるかもしれません。]]></description>
			<content:encoded><![CDATA[<p>AZlink/lookup のキャッシュ保持期限を1時間に変更しました。<br />
ブログパーツを作成しようとしたけど画像が無かった場合、1時間経ってから再作成すると画像が表れるかもしれません。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=C1XovBQn9gg:4W5y_2CBovU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=C1XovBQn9gg:4W5y_2CBovU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=C1XovBQn9gg:4W5y_2CBovU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:KwTdNBX3Jqk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=C1XovBQn9gg:4W5y_2CBovU:KwTdNBX3Jqk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=C1XovBQn9gg:4W5y_2CBovU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=C1XovBQn9gg:4W5y_2CBovU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/C1XovBQn9gg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5067/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5067</feedburner:origLink></item>
		<item>
		<title>AZlink/widgetの仕様が変わります／なんでしばらくテストします</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/NTLyl8dV8zk/5051</link>
		<comments>http://sakuratan.biz/archives/5051#comments</comments>
		<pubDate>Fri, 14 Oct 2011 06:15:18 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[ブログパーツ]]></category>
		<category><![CDATA[AZlink]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5051</guid>
		<description><![CDATA[前にもちょろっとブログに書いたのですが、AZlink/widget のサーバ代が払えなくなりそうなので別サーバに移動することにしました。 アクセス数とか見てるとそれなりに使ってくれている人がいると思う（今日の数字ですと2700万回ぐらいブログパーツが表示されています）ので、できるだけ多くのユーザーさんに今日のブログを読んで頂きたいと思っているのですが、ぶっちゃけ誰が使ってるのかほとんど把握していま... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5051">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://sakuratan.biz/archives/4755">前にもちょろっとブログに書いた</a>のですが、AZlink/widget のサーバ代が払えなくなりそうなので別サーバに移動することにしました。</p>
<p>アクセス数とか見てるとそれなりに使ってくれている人がいると思う（今日の数字ですと2700万回ぐらいブログパーツが表示されています）ので、できるだけ多くのユーザーさんに今日のブログを読んで頂きたいと思っているのですが、ぶっちゃけ誰が使ってるのかほとんど把握していませんので、ツイッターとかはてブとかで拡散にして頂けると助かります。どぞよろしくw</p>
<h3>これまでの経緯</h3>
<p>現在 AZlink/widget の API 部分（JavaScript のことです）は Google App Engine（通称 GAE）で動かしています。</p>
<p>Google は GAE の価格変更を予定してまして、11/1 から適用されます。詳しくは <a href="http://googleappengine.blogspot.com/2011/08/50-credit-for-new-billing-signups-and.html">Google App Engine Blog: $50 Credit for new billing signups and budget changes</a> とか <a href="http://www.infoq.com/jp/news/2011/09/Google-GAE-Prices">InfoQ: Googleがユーザの反応を見てGAEの価格変更を調整</a> とかをご覧ください。</p>
<p>この GAE の価格変更で、AZlink/widget のサーバ代は一日70ドル以上になる模様です。（↓新価格での10/13一日分のサーバ代のキャプチャ）</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2011/10/gaeprice.png" alt="" title="GAE サーバ代" width="438" height="28" class="aligncenter size-full wp-image-5052" /></p>
<p>GAE のサーバ代は1日あたりの課金になっていますので、毎日74.63ドルかかるとすると一ヶ月で17万円となります。払えません。</p>
<p>ということで別サーバに移動するか運用をやめるかの2択になったのですが、とりあえず別サーバに移動することにしました。</p>
<p>移動先はさくらインターネッツの VPS を予定しています。本当はさくらのクラウド使いたかったのですが、クラウドのリリースが GAE の価格変更に間に合わないようですので VPS を何台か借りて動かすつもりでいます。</p>
<p>システム移行に際していくつか仕様変更があります。システム負荷を抑えたいのが主な理由ですが、あまり使われていない／代替機能があるものについては移行のついでにサポートを打ちきろうと思っています。</p>
<h3>仕様変更</h3>
<p>以下、予定している仕様変更です。まず AZlink バージョン2 に関する仕様変更です。</p>
<ol>
<li>asin 指定でのブログパーツ呼び出しはできなくなります。</li>
<li>q 指定でのブログパーツ呼び出しもできなくなるかもしれません。現在検討中です。とりあえずテスト期間中はできなくなります。</li>
<li>asin / q 指定でのブログパーツ呼び出し場合、ランダムで node 指定された状態でブログパーツが表示されます。</li>
<li>preItemHook / postItemHook / onLoadHook / wrapperId / stubId パラメータは使えなくなります。</li>
<li>ranking パラメータが追加されます。</li>
<li>商品データの JSON オブジェクトのフォーマットが変わります。</li>
</ol>
<p>次に AZlink バージョン1に関する仕様変更です。</p>
<ol>
<li>asin 指定でのブログパーツ呼び出しはできなくなります。</li>
<li>search 指定でのブログパーツ呼び出しもできなくなるかもしれません。現在検討中です。とりあえずテスト期間中はできなくなります。</li>
<li>asin / search 指定でのブログパーツ呼び出し場合、ランダムで node 指定された状態でブログパーツが表示されます。</li>
<li>asin / search 指定でのブログパーツ呼び出し場合、ランダムで node 指定された状態でブログパーツが表示されます。</li>
<li>className / discountMark / infoSeparater / titleHook / itemHook / widgetHook / onload パラメータは使えなくなります。</li>
<li>商品データの JSON オブジェクトのフォーマットが変わります。</li>
</ol>
<p>asin 指定はできなくなります。<a href="http://sakuratan.biz/azlink/lookup/">AZlink/lookup</a> とか（<a href="http://app.bloghackers.net/amazlet/">amazlet</a>とか<a href="http://www.goodpic.com/mt/aws/">G-Tools</a>とか）で似たようなアフィリリンクを作れますのでそちらでお願いします。</p>
<h3>テスト</h3>
<p>システム移行の前に断続的にテストを行います。テストの目的は、以下の2点です。</p>
<ol>
<li>負荷を把握してサーバが何台ぐらい必要か見積もる</li>
<li>クエリ指定でのブログパーツ呼び出しがどの程度あるのか調べる</li>
</ol>
<p>テスト自体は、夜間にDNS を変更して新サーバで処理を行うようにする形で行います。テストに伴う DNS 変更は長くても1時間ぐらいで戻す予定です。なお、テストの実施予告は基本的に行いません。また、テストを行っている間、ブログパーツが表示されなくなったりするかもしれませんがご協力願います。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=NTLyl8dV8zk:YV5j8JAoLeU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=NTLyl8dV8zk:YV5j8JAoLeU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=NTLyl8dV8zk:YV5j8JAoLeU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=NTLyl8dV8zk:YV5j8JAoLeU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=NTLyl8dV8zk:YV5j8JAoLeU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/NTLyl8dV8zk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5051/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5051</feedburner:origLink></item>
		<item>
		<title>クロスブラウザでdocument.createElement(‘iframe’)した要素のonloadを呼び出す方法</title>
		<link>http://feedproxy.google.com/~r/sakuratan/HTqh/~3/I-WUkwwPu7c/5044</link>
		<comments>http://sakuratan.biz/archives/5044#comments</comments>
		<pubDate>Tue, 11 Oct 2011 15:38:57 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[DOM]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5044</guid>
		<description><![CDATA[&#8230;&#8230;.φ（．．）ﾒﾓﾒﾓです。 document.createElement(&#8216;iframe&#8217;) で作った DOM 要素に onload をセットする場合以下のようなコードを使います。 var iframe = document.createElement&#40;'iframe'&#41;; var onload_func = function&#... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5044">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>&#8230;&#8230;.φ（．．）ﾒﾓﾒﾓです。</p>
<p>document.createElement(&#8216;iframe&#8217;) で作った DOM 要素に onload をセットする場合以下のようなコードを使います。</p>
<div class="codecolorer-container javascript dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> iframe <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'iframe'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> onload_func <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// onload で実行する処理</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">all</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span>window.<span style="color: #660066;">opera</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// IE の場合 onreadystatechange が必要</span><br />
&nbsp; &nbsp; iframe.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>iframe.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;complete&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onload_func<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">// IE 以外なら onload で良い</span><br />
&nbsp; &nbsp; iframe.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onload_func<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> &nbsp; <br />
<span style="color: #009900;">&#125;</span><br />
<br />
iframe.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'...'</span><span style="color: #339933;">;</span><br />
parentNode.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>iframe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>コメントにも書いてますが、IE8 以下の場合 onreadystatechange を使う必要があります。</p>
<h3>参考サイト</h3>
<ul>
<li><a href="http://www.nczonline.net/blog/2009/09/15/iframes-onload-and-documentdomain/">Iframes, onload, and document.domain | NCZOnline</a></li>
</ul>
<h3>あまり参考にならなかったサイト</h3>
<ul>
<li><a href="http://support.microsoft.com/kb/239638/ja">PRB: OnReadyStateChange および IFrame を起動しない OnLoad イベント &#8211; support.microsoft.com</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=I-WUkwwPu7c:Tr9PpKFN_Y4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=I-WUkwwPu7c:Tr9PpKFN_Y4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=I-WUkwwPu7c:Tr9PpKFN_Y4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?i=I-WUkwwPu7c:Tr9PpKFN_Y4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sakuratan/HTqh?a=I-WUkwwPu7c:Tr9PpKFN_Y4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sakuratan/HTqh?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sakuratan/HTqh/~4/I-WUkwwPu7c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5044/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://sakuratan.biz/archives/5044</feedburner:origLink></item>
	</channel>
</rss>

