<?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"
	>

<channel>
	<title>ミヤビッチの穴</title>
	<atom:link href="http://hole.sugutsukaeru.jp/feed" rel="self" type="application/rss+xml" />
	<link>http://hole.sugutsukaeru.jp</link>
	<description>Perl, CGI, JavaScript - Perl プログラマの頭の中</description>
	<pubDate>Mon, 15 Mar 2010 07:18:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>ja</language>
			<item>
		<title>PostgreSQL で位取りカンマ付け（commify）</title>
		<link>http://hole.sugutsukaeru.jp/archives/122</link>
		<comments>http://hole.sugutsukaeru.jp/archives/122#comments</comments>
		<pubDate>Mon, 15 Mar 2010 07:18:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[コードサンプル]]></category>

		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=122</guid>
		<description><![CDATA[
価格表示などのために PostgreSQL で数値に１０００ごとの位取りをする方法。
myint が整数型カラムだとして

to_char(myint, &#8216;9,999,999&#8242;) as myprice

こうすると、１００万の位までスペースで前置されてしまう。前置スペースが付かないようにするには、「FM」をフォーマットに前置する。

to_char(myint, &#8216;FM9,999,999&#8242;) as myprice

]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/122/feed</wfw:commentRss>
		</item>
		<item>
		<title>【未解決】Opera で日本語名ファイルをアップロードすると送信される filename が文字化けする場合がある</title>
		<link>http://hole.sugutsukaeru.jp/archives/121</link>
		<comments>http://hole.sugutsukaeru.jp/archives/121#comments</comments>
		<pubDate>Fri, 18 Sep 2009 04:51:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[開発]]></category>

		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=121</guid>
		<description><![CDATA[
Opera で日本語名ファイルをアップロードすると送信される filename が文字化けする場合がある。
しかしなぜか同じように送っても文字化けしないファイルもある。
原因も再現条件も分からないが、とりあえず現象レポート。
基本のおさらい
フォーム送信
ファイルを送信する時は、フォームの enctype を「multipart/form-data」に指定する。
&#60;form name=&#8221;form1&#8243; method=&#8221;post&#8221; action=&#8221;show_postdata.cgi&#8221; ENCTYPE=&#8221;multipart/form-data&#8221;&#62;
file:&#60;input type=&#8221;file&#8221; name=&#8221;uploadFile&#8221;/&#62;&#60;br /&#62;
テキストフィールド:&#60;input type=&#8221;text&#8221; name=&#8221;textfield&#8221;/&#62;&#60;br /&#62;
：
&#60;input type=&#8221;submit&#8221; value=&#8221;OK&#8221;/&#62;
&#60;/form&#62;

送信される内容
送信される形式は以下のようになる。（受け取り側のCGIで標準入力をそのまま書き出したもの。）
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;36022435010291
Content-Disposition: form-data; name=&#8221;uploadFile&#8221;; filename=&#8221;アップロードファイル.txt&#8221;
Content-Type: text/plain
この行からファイルの中身です。
あああ
ファイルはバイナリの場合もあります。
この行までファイルの中身です。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;36022435010291
Content-Disposition: form-data; name=&#8221;textfield&#8221;
テキスト値
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;36022435010291&#8211;

ファイル名
送信された「filename=&#8221;アップロードファイル.txt&#8221;」の値をサーバ上のCGIプログラムなどでファイル名として解釈するのだが、この送信内容を作成しているのは送信元のブラウザの方なので、微妙に形式が異なる。
上記は Firefox の例だが、たとえば IE だとこの部分は
filename=&#8221;C:\Documents and Settings\user\デスクトップ\アップロードファイル.txt&#8221;
とローカルパスを付けた状態で送信してくる。（セキュリティ上どうかと思うけど、とりあえず不問。）
日本語ファイル名
最近のブラウザの場合大抵、ファイル名が日本語文字の場合、そのファイル名はフォームのページの文字コードで送信してくる。テキスト入力フィールドがある場合、テキストフィールドと同じ文字コードとなると思えばよい。
例えばフォームのページが Shift_JIS なら、ファイル名も Shift_JIS でのコード列になるし、ページが UTF-8 なら同じファイル名を UTF-8 コード列で送ってくる。
ただしこれもブラウザ依存なので、旧いブラウザだと必ずしもそうでない。
そして、日本語には「Shift_JIS」という、Perl プログラマにとっては厄介な文字コードがある。
Shift_JIS の場合、「表」や「申」や「ソ」の一部にIEが送ってくるローカルパス区切りの「\」であり、かつ Perl にとっては特殊文字である「\」を含んでいるのだ。
「申請書.doc」とか「分析結果表.xls」などのファイル名をブラウザはどう送ってくるか？
概要としては、以下の通り。
Firefox
ファイル名だけを、そのまま送ってくる。
例）filename=&#8221;申請書.doc&#8221;
IE
ファイルパスを含めて、そのまま送ってくる。
例）&#8221;C:\Documents and Settings\user\デスクトップ\申請書.doc&#8221;
この場合「申」の中にパス区切り「\」が含まれているので、プログラムで単純にファイル名を取り出してしまうと「請書.doc」というファイル名になるので注意が必要になる。
Opera
問題の Opera さんはファイル名だけを、特殊文字をエスケープして送ってくる。
例）filename=&#8221;申\請書.doc&#8221;
今回起きた問題
ということで、Opera はファイル名を自分なりに解釈してから送ってくれるらしいのだが、ファイル名によっては変な風にエンコードして送ってくる事が分かった。
どのエンコーディングスキームにも該当しないような不可解なコード列を送ってくる。
特定の文字列がある時という訳ではなく、何かの相互作用なようなのだが、不明。
参考データ表.xls &#8211;&#62;OK
参考データ表.txt &#8211;&#62;OK
参考.txt &#8211;&#62;NG
参考表.txt &#8211;&#62;NG
参考申請書.docx &#8211;&#62; NG
例えば、「参考データ表.xlsx」をアップロードしてファイル名を unpack(&#8221;H*&#8221; , [...]]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/121/feed</wfw:commentRss>
		</item>
		<item>
		<title>Selenium Core のテストケースでタブ（TAB）を入力する</title>
		<link>http://hole.sugutsukaeru.jp/archives/120</link>
		<comments>http://hole.sugutsukaeru.jp/archives/120#comments</comments>
		<pubDate>Tue, 25 Aug 2009 09:12:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[開発]]></category>

		<category><![CDATA[Selenium]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=120</guid>
		<description><![CDATA[
Selenium Core のテストケースでタブ入力を行う方法。
Web アプリケーションの自動テストツール Selenium Core でタブの入力を行いたい。TABは通常ブラウザでは入力できないが、コピー＆ペーストで入力されたタブをエラーとしてはじく機能のテストのため。
Selenium IDE（Firefox のプラグイン版）だとテストケースに設定したタブはタブ入力として扱ってくれるのだが、別のブラウザでテストケースを実行する場合、ブラウザベースの Selenium Test Runner を使用するため、タブ（および他のホワイトスペースも）ひとつの半角スペースとして扱われてしまい期待どおりのテストができない。
この回避方法。JavaScript を使って変数にタブを登録（sotre）しておく事によって解決。
タブがうまく入力できないテストケースの書き方

&#60;tr&#62;
&#60;td&#62;type&#60;/td&#62;
&#60;td&#62;subject&#60;/td&#62;
&#60;td&#62;コピーして    タブを入力します&#60;/td&#62;
&#60;!&#8211; ブランク部分にはタブが入力されている &#8211;&#62;
&#60;/tr&#62;

タブが期待どおり入力できるテストケースの書き方

&#60;tr&#62;
&#60;td&#62;store&#60;/td&#62;
&#60;td&#62;javascript{String.fromCharCode(9)}&#60;/td&#62;
&#60;td&#62;tab&#60;/td&#62;
&#60;/tr&#62;
&#60;tr&#62;
&#60;td&#62;type&#60;/td&#62;
&#60;td&#62;subject&#60;/td&#62;
&#60;td&#62;JavaScriptを利用して${tab}タブを入力します&#60;/td&#62;
&#60;/tr&#62;

]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/120/feed</wfw:commentRss>
		</item>
		<item>
		<title>eval 内でのワーニングの詳細を表示させる（ Perl ）</title>
		<link>http://hole.sugutsukaeru.jp/archives/119</link>
		<comments>http://hole.sugutsukaeru.jp/archives/119#comments</comments>
		<pubDate>Tue, 18 Aug 2009 04:26:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[開発]]></category>

		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=119</guid>
		<description><![CDATA[
「Use of uninitialized value at (eval 20) line 29.」等と eval 内で起こるワーニングの詳細を出力する方法（ Perl ）。
以下のコードをどこかに追加しておく。何階層か上に行くと、プログラム上の行番号などが表示される。
use Carp;
$SIG{__WARN__} = sub {
my $i = 0;
my @vals = qw(pkg filename line subr hasaargs wantarr evaltext is_req hints bitmask);
my %info;
while(@info{@vals} = caller($i++)){
for my $val (@vals){
warn &#8220;[$i] $val: $info{$val}\n&#8221;;
}
}
carp shift;
};
]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/119/feed</wfw:commentRss>
		</item>
		<item>
		<title>autocomplete ができなくなる理由</title>
		<link>http://hole.sugutsukaeru.jp/archives/118</link>
		<comments>http://hole.sugutsukaeru.jp/archives/118#comments</comments>
		<pubDate>Tue, 11 Aug 2009 03:30:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[解説]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=118</guid>
		<description><![CDATA[
サイトをリニューアルしたら、IEでログイン時のオートコンプリート（フォーム入力内容をブラウザが保存しておいて、自動的に入力してくれる機能）が使えなくなってしまう現象が出た。
悩んだ割に単純だったその理由。
フォーム送信の方法で、条件が揃わないと保存対象の送信とみなされないようです。今回はデザイン会社さんの作ってくれたリニューアルデザインをそのまま組み込んだので、問題が発生してしまった。
autocomplete が使えるフォーム送信の条件
以下のいずれか。

&#60;input type=&#8221;submit&#8221;&#62; で普通にフォーム送信
&#60;input type=&#8221;image&#8221;&#62; で普通にフォーム送信（onClick などを付けなくても type=&#8221;submit&#8221; の場合と同様に送信できる。）
&#60;input type=&#8221;image&#8221; onClick=&#8221;this.form.submit()&#8221;&#62; で送信。return false; を付けない。

autocomplete が使えなくなったパターン

&#60;input type=&#8221;image&#8221; onClick=&#8221;this.form.submit(); return false;&#8221;&#62; で送信。
フォームは送信できるが、これで送信すると autocomplete の値保存の対象とならない。今回デザイン会社さんの作ってくれたフォームを、「デザイン上の都合で付いているのかな～」と深く考えずにそのまま実装したらこの問題が発生。
&#60;input type=&#8221;button&#8221; onClick=&#8221;this.form.submit(); return false;&#8221;&#62;
&#60;input type=&#8221;button&#8221; onClick=&#8221;this.form.submit();&#8221;&#62;
type=&#8221;button&#8221; の場合は、&#8221;return false&#8221; するか否かにかかわらず autocomplete の値保存の対象とならない。

検証環境
Windows ＸＰ、ＩＥ7。
autocomplete が「&#60;input type=&#8221;image&#8221; onClick=&#8221;this.form.submit(); return false;&#8221;&#62;」で無効になる現象については、客先含めてもっと多くの環境で発生しました。
]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/118/feed</wfw:commentRss>
		</item>
		<item>
		<title>Windows 用 Perl CGI プログラム作成の留意点</title>
		<link>http://hole.sugutsukaeru.jp/archives/76</link>
		<comments>http://hole.sugutsukaeru.jp/archives/76#comments</comments>
		<pubDate>Fri, 13 Feb 2009 00:00:00 +0000</pubDate>
		<dc:creator>miyabiko</dc:creator>
		
		<category><![CDATA[解説]]></category>

		<category><![CDATA[CGI]]></category>

		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=76</guid>
		<description><![CDATA[Windows で稼動する Perl の CGI プログラムを書くときのマイナーな留意点。
]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/76/feed</wfw:commentRss>
		</item>
		<item>
		<title>ApacheBench で SSI のベンチマーク</title>
		<link>http://hole.sugutsukaeru.jp/archives/115</link>
		<comments>http://hole.sugutsukaeru.jp/archives/115#comments</comments>
		<pubDate>Fri, 30 Jan 2009 03:13:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[コードサンプル]]></category>

		<category><![CDATA[解説]]></category>

		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=115</guid>
		<description><![CDATA[
SSI（Server Side Include）のパフォーマンスへの影響って実際どうなのよ？という興味から、簡単にベンチマークを行ってみました。
前提

SSI は IncludesNOEXEC オプションで動かす（コマンド実行なし）。
このベンチマークは、差が出るかどうかを見るため。
実環境での負荷を図るための方針決定の指標とする。

ベンチマークの方法
概要
約20KB のHTMLページを
A. 単一の静的HTMLファイル
B. 2か所をSSIでの組み込み表示をした場合
のレスポンス速度を ApacheBench で測定。
SSIの設定
ウェブサーバはApache2.2。
Bのみ同じディレクトリ内の .htaccess に 「+IncludesNOEXEC」と「XBitHack on」を指定。
測定
受付側（ホストX）
%CPUと%MEMを5秒おきに記録（psコマンド）。
リクエスト側（ホストY）
Apache 1.3.x に添付の ApacheBench を利用。
「-n 1000 -c 10」（同時接続 10、トータル 1000回リクエスト）、「-n 2000 -c 20」、「-n 3000 -c 30」のオプションで続けて実行。
ハードウェア環境
ホストX （受付側）
FreeBSD 6.3-RELEASE on HP KAYAK
メモリ： 96MB
CPU: Pentium II 266MHz
HD: UDMA33 7200rpm（？）
※ 超ボロ。差を見るのが目的という事で&#8230;。
ホストY （リクエスト側）
FreeBSD 4.8-RELEASE on IBM x205
メモリ： 512MB
CPU: Celeron 1.8GHz
ネットワーク
ローカルネットワーク内で極力他のトラフィックを排除したが、完璧ではない。100BASE-T。
結果概要
（SSIなしに比して、SSIありの状態を記載。）

レスポンスは約2倍に遅くなるが、ミリ秒単位の違い。
CPU負荷が極端に増大する事は無いが、レスポンスに時間がかかる分、CPU利用時間が増える。
各リクエストの処理に時間がかかるため、立ち上がるスペアサーバの数が増加している時間帯が長い。

結果の考察（導入を検討する時に考えるべきこと）

SSI利用前のアクセス状況でApacheのスペアサーバ数の余裕があるかどうか。
スペアサーバのためのCPU、メモリの余裕があるかどうか。
SSI 有効化の方法による影響の違いも考慮が必要。
httpd.conf に設定した場合、Apaceh 1.3.xで全ての .html をSSI [...]]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/115/feed</wfw:commentRss>
		</item>
		<item>
		<title>wget でウェブページを部品ごとダウンロード</title>
		<link>http://hole.sugutsukaeru.jp/archives/113</link>
		<comments>http://hole.sugutsukaeru.jp/archives/113#comments</comments>
		<pubDate>Tue, 11 Nov 2008 23:12:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[解説]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=113</guid>
		<description><![CDATA[
wget をちょっと便利に使う方法。
ページを部品ごとダウンロード

wget -kp http://__URL__/

-k でリンクを相対パスに書き換え、-p で関連部品もダウンロード。
「このページみたいにしたいんだけど&#8230;」等の参考情報として渡されたURLをじっくり眺める時などに使います。
ただしJavaScriptで読み込む画像やCSSの背景画像は取れません。惜しい！
圧縮ファイルをダウンロード

wget http://__URL__/xxx.tar.gz

この使い方が一番多いですね。
ちょっと気になる点
日本語のファイル名をURIエスケープしたURLの場合、ローカルに保存する時にASCII文字に該当する部分だけ部分的にアンエスケープしてしまう。
&#8211;span-hosts を指定していなくても、取得中のサイト内からリダイレクトされると外部サイトの1枚目もダウンロードしてしまう。
]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/113/feed</wfw:commentRss>
		</item>
		<item>
		<title>Perl の Encode モジュールで使えるエンコーディング名を調べる</title>
		<link>http://hole.sugutsukaeru.jp/archives/112</link>
		<comments>http://hole.sugutsukaeru.jp/archives/112#comments</comments>
		<pubDate>Thu, 06 Nov 2008 23:11:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[解説]]></category>

		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=112</guid>
		<description><![CDATA[
EUC-JP はPerl のエンコーディングでは 「eucjp」だっけ「euc-jp」だっけ、という事を調べる時にたたくコマンド。

perl8 -MEncode -e &#8216;print join &#8220;\n&#8221;, Encode->encodings(&#8221;:all&#8221;),&#8221;\n&#8221;&#8216;

参考URL - Encode
「エイリアス」があるようで、多少見当違いのエンコーディング名でも自動変換してくれるようです。
]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/112/feed</wfw:commentRss>
		</item>
		<item>
		<title>find の隠れた機能</title>
		<link>http://hole.sugutsukaeru.jp/archives/111</link>
		<comments>http://hole.sugutsukaeru.jp/archives/111#comments</comments>
		<pubDate>Mon, 03 Nov 2008 05:16:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[解説]]></category>

		<guid isPermaLink="false">http://hole.sugutsukaeru.jp/?p=111</guid>
		<description><![CDATA[
make を勉強しようと思い立って、オライリーの「GNU Make」を読んでいる。

その中に、驚愕の記述が！！
find はマイナス記号の付いた引数より前の引数をディレクトリのリストとして認識します（この fiind の機能を何十年も知りませんでした）。

&#8230;私も何年も知りませんでしたよ。
早速やってみる。

find ~/work ~/docs -name &#8220;*doc&#8221;

おお、動く。
]]></description>
		<wfw:commentRss>http://hole.sugutsukaeru.jp/archives/111/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
