<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Selfkleptomaniac &#187; Apache</title>
	<atom:link href="http://selfkleptomaniac.org/archives/category/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://selfkleptomaniac.org</link>
	<description>Blogging is a disease: selfkleptomania, your normal condition.</description>
	<lastBuildDate>Mon, 19 Jul 2010 16:29:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>変なCSRF対策</title>
		<link>http://selfkleptomaniac.org/archives/1325</link>
		<comments>http://selfkleptomaniac.org/archives/1325#comments</comments>
		<pubDate>Mon, 28 Dec 2009 18:15:46 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/archives/1325</guid>
		<description><![CDATA[au端末のみアクセス可能なサイトでクロスサイトリクエストフォージェリー対策が必要になったのだが、ワンタイムトークンとかのよくある手段だとおもしろくないので、何かないかと考えてみた。 auの端末からのリクエストには、端末の契約情報に紐づいた一意のID（サブスクライバID）がリクエストヘッダとして送信される。そこで、こんなのを作ってみた。 （１）リモートアドレスでauのデートウェイからのリクエスト以外は弾く （２）POSTリクエストを受け付けるURIはサブスクライバIDで異なる まあ（１）はよくあることなのでいいとして、（２）はこんな感じになっている。公開するURLは「http://example.com/form」とかいう形式になっている。au端末からそのURLへのリクエストがあると、サーバ側で「https://example.com/xxxxxxxxxx/」にリダイレクトする。この「xxxxxxxxxx」はサブスクライバIDとサーバ側に保持している特定のsaltとなる文字列（例えば創世記の全文）から生成されたハッシュ値になっている。リクエストしてきた端末のサブスクライバIDから生成したハッシュ値とURIのハッシュ値が一致すればリクエストを通して、そうでなければ弾く。リダイレクト処理が入るので「http://example.com/form」へのPOSTリクエストはリクエストボディーの内容が消えたGETのリクエストになってしまうから、もし第三者がこのURLに対してCSRFを仕掛けてきても無効化される。ハッシュ値付きの正しいURLにPOSTリクエストを投げるようにしたくても、端末が送信するサブスクライバIDとsalt値とハッシュ値の生成ルールが分からなければ犠牲者の端末専用のURLが推測できないため攻撃用のフォームを作ることができない。 あとは.htaccessなどで存在しないディレクトリへのアクセスをリライトしてしまえばおしまい。 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] とかいう感じ。いやっほう。 あんまり見たことないやり方なので破り方があるかどうかちゃんと検証できてない気がするけど、思いつかないので実戦投入した。]]></description>
			<content:encoded><![CDATA[<p>au端末のみアクセス可能なサイトで<a href="http://ja.wikipedia.org/wiki/クロスサイトリクエストフォージェリ">クロスサイトリクエストフォージェリー</a>対策が必要になったのだが、ワンタイムトークンとかのよくある手段だとおもしろくないので、何かないかと考えてみた。</p>
<p>auの端末からのリクエストには、端末の契約情報に紐づいた一意のID（サブスクライバID）がリクエストヘッダとして送信される。そこで、こんなのを作ってみた。</p>
<p>（１）リモートアドレスでauのデートウェイからのリクエスト以外は弾く<br />
（２）POSTリクエストを受け付けるURIはサブスクライバIDで異なる</p>
<p>まあ（１）はよくあることなのでいいとして、（２）はこんな感じになっている。公開するURLは「http://example.com/form」とかいう形式になっている。au端末からそのURLへのリクエストがあると、サーバ側で「https://example.com/xxxxxxxxxx/」にリダイレクトする。この「xxxxxxxxxx」はサブスクライバIDとサーバ側に保持している特定のsaltとなる文字列（例えば創世記の全文）から生成されたハッシュ値になっている。リクエストしてきた端末のサブスクライバIDから生成したハッシュ値とURIのハッシュ値が一致すればリクエストを通して、そうでなければ弾く。リダイレクト処理が入るので「http://example.com/form」へのPOSTリクエストはリクエストボディーの内容が消えたGETのリクエストになってしまうから、もし第三者がこのURLに対してCSRFを仕掛けてきても無効化される。ハッシュ値付きの正しいURLにPOSTリクエストを投げるようにしたくても、端末が送信するサブスクライバIDとsalt値とハッシュ値の生成ルールが分からなければ犠牲者の端末専用のURLが推測できないため攻撃用のフォームを作ることができない。</p>
<p>あとは.htaccessなどで存在しないディレクトリへのアクセスをリライトしてしまえばおしまい。</p>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</pre>
<p>とかいう感じ。いやっほう。</p>
<p>あんまり見たことないやり方なので破り方があるかどうかちゃんと検証できてない気がするけど、思いつかないので実戦投入した。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=1325&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/1325/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>携帯サイトのセキュリティ対策（ざっくり）</title>
		<link>http://selfkleptomaniac.org/archives/1308</link>
		<comments>http://selfkleptomaniac.org/archives/1308#comments</comments>
		<pubDate>Tue, 08 Dec 2009 07:56:44 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/?p=1308</guid>
		<description><![CDATA[携帯サイト構築で忘れがちなセキュリティ対策を記録しておく。もちろん、外部に公開されているサーバで余計なポートが開放されていたり要らないサービスが起動していたりするのは論外。 SSL SSLを利用している場合、基本的にSSLv3とTLS1以外を利用することはないので切っておく。特にNull暗号をオフにしておく必要がある。 Apacheだとこんな感じ。 SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXP:!eNULL:!aNULL Poundだとこんな感じ。 ListenHTTPS Ciphers "ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXP:!eNULL:!aNULL" Apache リクエストヘッダのHost部分を書き換えられることを前提とした設定をしていないケースが多いと思われる。VirtualHostの先頭にデフォルトの設定を入れて対応する。mod_rewriteは入っているものとみなす。 Apacheのバージョンが低い場合のTRACEメソッドの禁止も追加。 DocumentRoot /var/www/html ServerName default.host.name RewriteEngine on RewriteCond %{REQUEST_URI} !^/server-status RewriteRule .* - [F] #TRACEメソッドの禁止 RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule .* - [F] Aliasで指定されたiconsやmanualは不要なので削除。 #Alias /icons/ "/var/www/icons/" # # 以下このディレクティブの最後まで。 PHP 基本的な設定はされているものとして、忘れがちなのをいくつか。php.iniの場合は バージョン情報を晒さない。 expose_php = Off リモートファイルをスクリプトとして読み込ませない。 allow_url_fopen = Off リモートファイルをスクリプトとして読み込ませない。 display_errors [...]]]></description>
			<content:encoded><![CDATA[<p>携帯サイト構築で忘れがちなセキュリティ対策を記録しておく。もちろん、外部に公開されているサーバで余計なポートが開放されていたり要らないサービスが起動していたりするのは論外。</p>
<h3>SSL</h3>
<p>SSLを利用している場合、基本的にSSLv3とTLS1以外を利用することはないので切っておく。特にNull暗号をオフにしておく必要がある。</p>
<p>Apacheだとこんな感じ。</p>
<pre>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXP:!eNULL:!aNULL
</pre>
<p>Poundだとこんな感じ。</p>
<pre>
ListenHTTPS
  Ciphers "ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXP:!eNULL:!aNULL"
</pre>
<h3>Apache</h3>
<p>リクエストヘッダのHost部分を書き換えられることを前提とした設定をしていないケースが多いと思われる。VirtualHostの先頭にデフォルトの設定を入れて対応する。mod_rewriteは入っているものとみなす。</p>
<p>Apacheのバージョンが低い場合のTRACEメソッドの禁止も追加。</p>
<pre>
<VirtualHost *:80>
  DocumentRoot /var/www/html
  ServerName default.host.name
  RewriteEngine on
  RewriteCond %{REQUEST_URI} !^/server-status
  RewriteRule .* - [F]
  #TRACEメソッドの禁止
  RewriteCond %{REQUEST_METHOD} ^TRACE
  RewriteRule .* - [F]
</VirtualHost>
</pre>
<p>Aliasで指定されたiconsやmanualは不要なので削除。</p>
<pre>
#Alias /icons/ "/var/www/icons/"
#
#<Directory "/var/www/icons">
以下このディレクティブの最後まで。
</pre>
<h3>PHP</h3>
<p>基本的な設定はされているものとして、忘れがちなのをいくつか。php.iniの場合は</p>
<p>バージョン情報を晒さない。</p>
<pre>
expose_php = Off
</pre>
<p>リモートファイルをスクリプトとして読み込ませない。</p>
<pre>
allow_url_fopen = Off
</pre>
<p>リモートファイルをスクリプトとして読み込ませない。</p>
<pre>
display_errors = Off
</pre>
<p>続く、かも。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=1308&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/1308/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HadoopのnamespaceIDでエラー</title>
		<link>http://selfkleptomaniac.org/archives/1279</link>
		<comments>http://selfkleptomaniac.org/archives/1279#comments</comments>
		<pubDate>Wed, 14 Oct 2009 09:22:10 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Tuit]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/archives/1279</guid>
		<description><![CDATA[Hadoopでときどき「Incompatible namespaceIDs in /tmp/hadoop-user/dfs/data」みたいなエラーが出る。既知の問題らしく、namespaceのIDを記述したファイルを見ても同じだったりするので困るが、潔く $ $HADOOP_HOME/bin/stop-all.sh $ rm -rf /tmp/hadoop-user/* ←パスは設定ファイルに依存、間違えたら知らないよ $ $HADOOP_HOME/bin/hadoop namenode -format $ $HADOOP_HOME/bin/start-all.sh で再フォーマットすると直る。 なかなか便利なトラブルシューティング集を見つけた。]]></description>
			<content:encoded><![CDATA[<p>Hadoopでときどき「Incompatible namespaceIDs in /tmp/hadoop-user/dfs/data」みたいなエラーが出る。<a href="http://issues.apache.org/jira/browse/HDFS-107">既知の問題らしく</a>、namespaceのIDを記述したファイルを見ても同じだったりするので困るが、潔く</p>
<pre>
$ $HADOOP_HOME/bin/stop-all.sh
$ rm -rf /tmp/hadoop-user/* ←パスは設定ファイルに依存、間違えたら知らないよ
$ $HADOOP_HOME/bin/hadoop namenode -format
$ $HADOOP_HOME/bin/start-all.sh
</pre>
<p>で再フォーマットすると直る。</p>
<p><a href="http://www.cs.brandeis.edu/~cs147a/lab/hadoop-troubleshooting/">なかなか便利なトラブルシューティング集</a>を見つけた。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=1279&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/1279/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ハードウェア変更</title>
		<link>http://selfkleptomaniac.org/archives/1204</link>
		<comments>http://selfkleptomaniac.org/archives/1204#comments</comments>
		<pubDate>Mon, 28 Sep 2009 14:34:37 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/archives/1204</guid>
		<description><![CDATA[この数日、サーバの負荷が急に増えたのでハードウェアを変更しました。これまでのマシンをプロキシにして、バックエンドにもう少しスペックの高いマシンを置いてコンテンツをそちらに移設しています。 新しいマシンはHPのProliant ML115 G5、AMD Phenom IIプロセッサにメモリ8GB、HDDに至っては合計2.5TB、さらにSSDが32GBという構成にESXiで3つのOSが動作しています。これまでのHPのデスクトップ用Celeronマシンとはかなり違いますが、こちらも安定して動いてくれることを願います。 猫大好きです。今日も二人で過ごしています。]]></description>
			<content:encoded><![CDATA[<p>この数日、サーバの負荷が急に増えたのでハードウェアを変更しました。これまでのマシンをプロキシにして、バックエンドにもう少しスペックの高いマシンを置いてコンテンツをそちらに移設しています。</p>
<p>新しいマシンは<a href="http://h50146.www5.hp.com/products/servers/proliant/ml115g5/index.html">HPのProliant ML115 G5</a>、AMD Phenom IIプロセッサにメモリ8GB、HDDに至っては合計2.5TB、さらにSSDが32GBという構成にESXiで3つのOSが動作しています。これまでのHPのデスクトップ用Celeronマシンとはかなり違いますが、こちらも安定して動いてくれることを願います。</p>
<p>猫大好きです。今日も二人で過ごしています。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=1204&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/1204/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TRACEなどのリクエストメソッドの禁止</title>
		<link>http://selfkleptomaniac.org/archives/1158</link>
		<comments>http://selfkleptomaniac.org/archives/1158#comments</comments>
		<pubDate>Thu, 11 Jun 2009 09:21:37 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/?p=1158</guid>
		<description><![CDATA[ほぼ同じ内容のエントリを見つけたけど、よく忘れるのでここにメモしておく。 最近の傾向として、ウェブアプリケーションの導入前にセキュリティ審査が入ることが多くなったのだが、その際にApacheのバージョンが2.0.55より前の場合は &#60;IfModule mod_rewrite.c&#62; RewriteEngine On RewriteCond %{REQUEST_METHOD} ^(TRACE&#124;TRACK&#124;OPTIONS) RewriteRule .* - [F] &#60;/IfModule&#62; こんな感じでmod_rewriteを使ってTRACE（とかTRACKとかOPTIONS）メソッドを蹴るようにしないといけない。まあ、TRACKはIISでサポートされているけどApacheにはない（RFC2616のHTTP1.1の仕様にもない）のでいいんだけれども。 Apacheが2.0.55以降だと TraceEnable Off で済んでしまう。]]></description>
			<content:encoded><![CDATA[<p><a href="http://bluenotes.justblog.jp/technote/2008/10/apache-trace-43.html">ほぼ同じ内容のエントリ</a>を見つけたけど、よく忘れるのでここにメモしておく。</p>
<p>最近の傾向として、ウェブアプリケーションの導入前にセキュリティ審査が入ることが多くなったのだが、その際にApacheのバージョンが2.0.55より前の場合は</p>
<pre>
&lt;IfModule mod_rewrite.c&gt;
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
    RewriteRule .* - [F]
&lt;/IfModule&gt;
</pre>
<p>こんな感じでmod_rewriteを使ってTRACE（とかTRACKとかOPTIONS）メソッドを蹴るようにしないといけない。まあ、TRACKはIISでサポートされているけどApacheにはない（<a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>のHTTP1.1の仕様にもない）のでいいんだけれども。</p>
<p>Apacheが2.0.55以降だと</p>
<pre>
TraceEnable Off
</pre>
<p>で済んでしまう。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=1158&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/1158/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CouchDBによる次世代データストレージ</title>
		<link>http://selfkleptomaniac.org/archives/744</link>
		<comments>http://selfkleptomaniac.org/archives/744#comments</comments>
		<pubDate>Sun, 26 Oct 2008 15:58:42 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CouchDB]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/archives/744</guid>
		<description><![CDATA[「CouchDBによる次世代データストレージ」と題された文章があったので以下に訳出。著者はCouchDBの開発者。 原文はこちら。 『CouchDBによる次世代ストレージ』 コンピュータの世界は常に、速く、進化している。しかし、データを保存するやり方は数十年も（！）前に作り出されたものだ。現在のニーズに適応するために、古いシステムに対するワイルドなソリューションがなされてきた。このような実践はハッキングと呼ばれている。このようなソリューションは多くの人々にとって有用であるが、その一方で、根本的な欠陥が行き渡っている。つまり、それらはハッキングであり、システムの設計と実装の根本となるアイデアに背を向けているのだ。 CouchDBは現代のデータストレージに必要とされるものを満たすよう設計されている。サポートするべきレガシーは存在せず、ハッキングの必要なしに現在の、そして未来のシステムで動作することができる。もし「The four pillars of data management」にあるようにデータを保存、閲覧、安全化、共有する方法をお探しなら、CouchDBはその全てを備えている。つまり 保存…ローバストでACID対応のストレージエンジン 閲覧…データを効果的にフィルター、フォーマット、体系化するViewエンジン 共有…効率のいい、インクリメンタルで双方向的なレプリケーション セキュリティ…分散セキュリティとバリデーションモデル お手元のデータベースでは上のどれだけがサポートされているだろうか。 CouchDBはマルチコアCPUの複数台構成による分散処理を直接サポートしている。しかもデフォルトで。これからそれをご覧に入れよう。 いつ？ 2007年6月12日、チューリッヒのWebtuesdayで。そのときお会いしましょう。 これだけ読んでもわかったようなわからないような感じなのでもうちょっと追いかけてみる。]]></description>
			<content:encoded><![CDATA[<p>「<a href="http://incubator.apache.org/couchdb/">CouchDB</a>による次世代データストレージ」と題された文章があったので以下に訳出。著者は<a href="http://jan.prima.de/">CouchDBの開発者</a>。</p>
<p><a href="http://jan.prima.de/~jan/plok/archives/70-Next-generation-data-storage-with-CouchDb.html">原文はこちら</a>。</p>
<blockquote>
<p>『CouchDBによる次世代ストレージ』</p>
<p>コンピュータの世界は常に、速く、進化している。しかし、データを保存するやり方は数十年も（！）前に作り出されたものだ。現在のニーズに適応するために、古いシステムに対するワイルドなソリューションがなされてきた。このような実践はハッキングと呼ばれている。このようなソリューションは多くの人々にとって有用であるが、その一方で、根本的な欠陥が行き渡っている。つまり、それらはハッキングであり、システムの設計と実装の根本となるアイデアに背を向けているのだ。</p>
<p>CouchDBは現代のデータストレージに必要とされるものを満たすよう設計されている。サポートするべきレガシーは存在せず、ハッキングの必要なしに現在の、そして未来のシステムで動作することができる。もし「<a href="http://damienkatz.net/2006/12/the_four_pillar.html">The four pillars of data management</a>」にあるようにデータを保存、閲覧、安全化、共有する方法をお探しなら、CouchDBはその全てを備えている。つまり</p>
<p>保存…ローバストで<a href="http://en.wikipedia.org/wiki/ACID">ACID</a>対応のストレージエンジン</p>
<p>閲覧…データを効果的にフィルター、フォーマット、体系化するViewエンジン</p>
<p>共有…効率のいい、インクリメンタルで双方向的なレプリケーション</p>
<p>セキュリティ…分散セキュリティとバリデーションモデル</p>
<p>お手元のデータベースでは上のどれだけがサポートされているだろうか。</p>
<p>CouchDBはマルチコアCPUの複数台構成による分散処理を直接サポートしている。しかもデフォルトで。これからそれをご覧に入れよう。</p>
<p>いつ？</p>
<p>2007年6月12日、<a href="http://webtuesday.ch/">チューリッヒのWebtuesday</a>で。そのときお会いしましょう。</p>
</blockquote>
<p>これだけ読んでもわかったようなわからないような感じなのでもうちょっと追いかけてみる。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=744&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/744/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoftからの刺客、その名もWIMP</title>
		<link>http://selfkleptomaniac.org/archives/507</link>
		<comments>http://selfkleptomaniac.org/archives/507#comments</comments>
		<pubDate>Tue, 27 May 2008 06:09:52 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/?p=507</guid>
		<description><![CDATA[LAMPに対抗して、MicrosoftがIIS上でPHPを動かす環境を宣伝している。MSSQLではなくMySQLやPostgreSQLを宣伝するというのも愉快ではあるが。 それより何より、やはり気になるのは Linux + Apache + MySQL + Perl(PHP, Python&#8230;) = LAMP に対抗したキャンペーンの略称が、 Windows + IIS + MySQL + PHP = WIMP になってしまっていることだろうか。 英辞郎より： wimp 【名】 弱虫、作話症｛さくわしょう｝、意気地なし、怖がり、勇気のないやつ、すぐあきらめるやつ ・You&#8217;re such a wimp. : 気が小さいね。 ・That tequilla shot has been sitting there an hour, are you too much of a wimp to drink it? さすが世界のMicrosoftはユーモアを忘れていない。]]></description>
			<content:encoded><![CDATA[<p><a href="http://ja.wikipedia.org/wiki/LAMP">LAMP</a>に対抗して、MicrosoftがIIS上でPHPを動かす環境を<a href="http://www.microsoft.com/japan/opensource/php/default.mspx">宣伝している</a>。MSSQLではなくMySQLやPostgreSQLを宣伝するというのも愉快ではあるが。</p>
<p>それより何より、やはり気になるのは</p>
<p>Linux + Apache + MySQL + Perl(PHP, Python&#8230;) = LAMP</p>
<p>に対抗したキャンペーンの略称が、</p>
<p>Windows + IIS + MySQL + PHP = WIMP</p>
<p>になってしまっていることだろうか。</p>
<p><a href="http://eow.alc.co.jp/wimp/UTF-8/?ref=sa">英辞郎より</a>：</p>
<blockquote><p>
wimp<br />
【名】</p>
<p>      弱虫、作話症｛さくわしょう｝、意気地なし、怖がり、勇気のないやつ、すぐあきらめるやつ<br />
      ・You&#8217;re such a wimp. : 気が小さいね。<br />
      ・That tequilla shot has been sitting there an hour, are you too much of a wimp to drink it?
</p></blockquote>
<p>さすが世界のMicrosoftはユーモアを忘れていない。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=507&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/507/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>携帯端末の404 Not found対策</title>
		<link>http://selfkleptomaniac.org/archives/505</link>
		<comments>http://selfkleptomaniac.org/archives/505#comments</comments>
		<pubDate>Sat, 24 May 2008 13:24:38 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/archives/505</guid>
		<description><![CDATA[携帯端末の場合、サーバからステータスコード404が返ると、サーバ側のエラー画面を表示するのではなく処理を中断してしまうことがある（少なくともauではそうなった）ので、.htaccessでの制御で工夫しなければいけない。 普通、ステータスコード別に表示するHTMLドキュメントを指定する場合は ErrorDocument 404 /error.html のようにErrorDocumentディレクティブを利用する。しかし、ここで指定するのがローカルファイルへのパスの場合、ステータスコードはそのまま404を返してしまうため、携帯端末だとページを表示する前に処理が中断され、指定したドキュメントを表示させることができない。 解決方法は簡単で、 ErrorDocument 404 http://selfkleptomaniac.org/error.html のようにリモートのURLを指定すると、この場合は404ではなくリダイレクトの302が返るため、携帯でも問題なく表示することができる。Apacheのマニュアルでは リモート URL (例えば、頭に http と付与した方法) を ErrorDocument に指定するとき、 たとえ文書が同じサーバにあろうとも、ドキュメントがどこにあるかを通知するために、 Apache はリダイレクトをクライアントに送出するということに、注意してください。 これにはいろいろと関連して起こる問題があります。 中でも最も重要なのは、クライアントは元々のエラーステータスコードを受け取らず、 代わりにリダイレクトのステータスコードを受け取るということです。 これにより、ステータスコードを使って URL が有効であるかどうかを決定しようとする ウェブロボットやその他クライアントを、混乱させるかもしれません。 さらに、ErrorDocument 401 にリモートの URL を指定すると、 クライアントは 401 というステータスコードを受け取らないため、 パスワードをユーザーに入力要求しなければならないことがわかりません。 従って、ErrorDocument 401 というディレクティブを使う場合は、 必ずローカルな文書を参照しなければなりません。 とのこと。]]></description>
			<content:encoded><![CDATA[<p>携帯端末の場合、サーバからステータスコード404が返ると、サーバ側のエラー画面を表示するのではなく処理を中断してしまうことがある（少なくともauではそうなった）ので、.htaccessでの制御で工夫しなければいけない。</p>
<p>普通、ステータスコード別に表示するHTMLドキュメントを指定する場合は</p>
<pre>ErrorDocument 404 /error.html
</pre>
<p>のように<a href="http://httpd.apache.org/docs/2.2/ja/mod/core.html#errordocument">ErrorDocumentディレクティブ</a>を利用する。しかし、ここで指定するのがローカルファイルへのパスの場合、ステータスコードはそのまま404を返してしまうため、携帯端末だとページを表示する前に処理が中断され、指定したドキュメントを表示させることができない。</p>
<p>解決方法は簡単で、</p>
<pre>ErrorDocument 404 http://selfkleptomaniac.org/error.html
</pre>
<p>のようにリモートのURLを指定すると、この場合は404ではなくリダイレクトの302が返るため、携帯でも問題なく表示することができる。Apacheのマニュアルでは</p>
<blockquote><p>リモート URL (例えば、頭に http と付与した方法) を ErrorDocument に指定するとき、 たとえ文書が同じサーバにあろうとも、ドキュメントがどこにあるかを通知するために、 Apache はリダイレクトをクライアントに送出するということに、注意してください。 これにはいろいろと関連して起こる問題があります。 中でも最も重要なのは、クライアントは元々のエラーステータスコードを受け取らず、 代わりにリダイレクトのステータスコードを受け取るということです。 これにより、ステータスコードを使って URL が有効であるかどうかを決定しようとする ウェブロボットやその他クライアントを、混乱させるかもしれません。 さらに、ErrorDocument 401 にリモートの URL を指定すると、 クライアントは 401 というステータスコードを受け取らないため、 パスワードをユーザーに入力要求しなければならないことがわかりません。 従って、ErrorDocument 401 というディレクティブを使う場合は、 必ずローカルな文書を参照しなければなりません。</p></blockquote>
<p>とのこと。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=505&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/505/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo JapanのAPI、まめな病人</title>
		<link>http://selfkleptomaniac.org/archives/504</link>
		<comments>http://selfkleptomaniac.org/archives/504#comments</comments>
		<pubDate>Thu, 22 May 2008 04:04:01 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/archives/504</guid>
		<description><![CDATA[ブスコバンのアレルギーらしく、健康診断が終わってからずっとひどい頭痛だ。今日はちょっと家で休んでいる。 Yahoo JapanのAPI用に既存のPEARパッケージを拡張したServices_Yahoo_JPがある（作者サイト）。面白そうなのでさっそく使ってみた。 テキスト解析はこんな風に使える。例えばテキストの読みがなを取得する。 &#60;?php require_once 'Services/Yahoo/JP/MA.php'; $keyword = 'これは日本語です。'; $app_id = 'Your APP ID'; try{ $yahoo = Services_Yahoo_JP_MA::factory('parse'); $yahoo-&#62;withAppID($app_id); $yahoo-&#62;setSentence($keyword); $result = $yahoo-&#62;submit(); } catch(Services_Yahoo_Exception $e){ $error = 'すいません、YahooJapanに接続できませんでした。'; } if($result){ $xml =&#38; $result-&#62;xml-&#62;ma_result-&#62;word_list-&#62;word; foreach($xml as $key =&#62; $val){ print($val-&#62;reading . "\n"); } } ?&#62; なるほど。で、何か面白いことでもできないかと考えたが、Yahooから戻ってくる読みがなをさらにローマ字に変換して、Mac OS Xに付属のsayコマンドで読み上げてみるのはどうだろう。 $ say -o 出力ファイル "読み上げるテキスト" 上の書式で変換できるので、フロントエンドのPHPと連携してみれば簡単だ。 [...]]]></description>
			<content:encoded><![CDATA[<p>ブスコバンのアレルギーらしく、健康診断が終わってからずっとひどい頭痛だ。今日はちょっと家で休んでいる。</p>
<p><a href="http://developer.yahoo.co.jp/">Yahoo Japanの</a><a href="http://developer.yahoo.co.jp/">API</a>用に既存のPEARパッケージを拡張した<a href="http://pear.php.net/package/Services_Yahoo_JP/">Services_Yahoo_JP</a>がある（<a href="http://phpize.net/">作者サイト</a>）。面白そうなのでさっそく使ってみた。</p>
<p><a href="http://developer.yahoo.co.jp/jlp/">テキスト解析</a>はこんな風に使える。例えばテキストの読みがなを取得する。</p>
<pre>&lt;?php
require_once 'Services/Yahoo/JP/MA.php';

$keyword = 'これは日本語です。';
$app_id = 'Your APP ID';

try{
        $yahoo = Services_Yahoo_JP_MA::factory('parse');
        $yahoo-&gt;withAppID($app_id);
        $yahoo-&gt;setSentence($keyword);
        $result = $yahoo-&gt;submit();

} catch(Services_Yahoo_Exception $e){
        $error = 'すいません、YahooJapanに接続できませんでした。';
}

if($result){
        $xml =&#38; $result-&gt;xml-&gt;ma_result-&gt;word_list-&gt;word;
        foreach($xml as $key =&gt; $val){
            print($val-&gt;reading . "\n");
        }
}
?&gt;
</pre>
<p>なるほど。で、何か面白いことでもできないかと考えたが、Yahooから戻ってくる読みがなをさらにローマ字に変換して、Mac OS Xに付属のsayコマンドで読み上げてみるのはどうだろう。</p>
<pre>$ say -o 出力ファイル "読み上げるテキスト"
</pre>
<p>上の書式で変換できるので、フロントエンドのPHPと連携してみれば簡単だ。</p>
<p>そこでふと思いついた。sayコマンドは声の指定も可能なのだが、プリセットされたデータには歌いながらしゃべるパターンもあったはずだ。それを指定すれば、入力したテキストを歌うこともできるじゃないか。</p>
<pre>$ say -o 出力ファイル -v "声のパターン名" "読み上げるテキスト"
</pre>
<p>そうと決まれば話は早い。というわけで<a href="http://selfkleptomaniac.org/sing/">デモを作成した</a>。（Proof of conceptということで無茶なことはしないでくださいね）</p>
<p>テキストが入力されると、バックエンドのMacBookにHTTPで通信してプロシージャを呼び出し、MacBook側はテキストを元に音声ファイルを作成してMP3に変換、最終的に作られたファイルをDocmentRoot以下に設置してファイルのパスを返す。フロントエンドのウェブサーバにリバースプロキシでMacBookのローカルファイルにアクセス可能にしてあげていっちょあがり。文字で書くとややこしいが、図にするといたって単純。</p>
<p><img src="http://selfkleptomaniac.org/wp-content/uploads/2008/05/sing-system-1.png" height="341" width="313" border="1" hspace="4" vspace="4" alt="Sing System-1" /><br />
追記：Yahoo JapanのAPI側で数字の読み方は返してくれないみたいだ。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=504&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/504/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Leopard雑感</title>
		<link>http://selfkleptomaniac.org/archives/381</link>
		<comments>http://selfkleptomaniac.org/archives/381#comments</comments>
		<pubDate>Sun, 18 Nov 2007 02:49:46 +0000</pubDate>
		<dc:creator>y</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[pgpool]]></category>

		<guid isPermaLink="false">http://selfkleptomaniac.org/archives/381</guid>
		<description><![CDATA[Leopardにして困ったこと。 ■Apache 　apachectlの「ULIMIT_MAX_FILES=&#8221;ulimit -S -n `ulimit -H -n`&#8221;」の行でエラー。ulimitの引数が「unlimited」になるとエラーらしい。とりあえず動くし手元のテスト環境なので無視。 ■pgpool-II 　起動したら「could not create shared memory segment: Cannot allocate memory」で死ぬ。どうにもわからんのでpgpoolに戻した。 ■PHP 　PHP-5.2.5はiconv関連のエラーでビルドできない。ext/iconv/iconv.cを開いて:%s/iconv_open/libiconv_open/gと:%s/iconv_close/libiconv_close/gすればビルドできるようになる。Leopard対応できてない。 ■kinput2-macim 　Leopard対応していない、と怒られてインストールできない。対策なし。]]></description>
			<content:encoded><![CDATA[<p>Leopardにして困ったこと。</p>
<p><span style="font-family:serif;">■</span>Apache</p>
<p>　apachectlの「ULIMIT_MAX_FILES=&#8221;ulimit -S -n `ulimit -H -n`&#8221;」の行でエラー。ulimitの引数が「unlimited」になるとエラーらしい。とりあえず動くし手元のテスト環境なので無視。</p>
<p><span style="font-family:serif;">■</span>pgpool-II</p>
<p>　起動したら「could not create shared memory segment: Cannot allocate memory」で死ぬ。どうにもわからんのでpgpoolに戻した。</p>
<p><span style="font-family:serif;">■</span>PHP</p>
<p>　PHP-5.2.5はiconv関連のエラーでビルドできない。ext/iconv/iconv.cを開いて:%s/iconv_open/libiconv_open/gと:%s/iconv_close/libiconv_close/gすればビルドできるようになる。Leopard対応できてない。</p>
<p><span style="font-family:serif;">■</span>kinput2-macim</p>
<p>　Leopard対応していない、と怒られてインストールできない。対策なし。</p>
<img src="http://selfkleptomaniac.org/?ak_action=api_record_view&id=381&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://selfkleptomaniac.org/archives/381/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
