<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/ME2.2.1" -->
<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/"
	>

<channel>
	<title>TIPS</title>
	<link>http://www.connect-i.co.jp/tipsblog</link>
	<description>Web と Linux に関する豆知識</description>
	<pubDate>Thu, 02 Jul 2009 05:06:20 +0900</pubDate>
	<generator>http://wordpress.org/?v=ME2.2.1</generator>
	<language>ja</language>
			<item>
		<title>UNIX の小技</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=27</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=27#comments</comments>
		<pubDate>Thu, 02 Jul 2009 10:17:13 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=27</guid>
		<description><![CDATA[1. pv: パイプラインの速度表示
pv はパイプライン中を流れるデータの速度や予想終了時間を表示します。
pv - Pipe Viewer
http://www.ivarch.com/programs/pv.shtml
Fedora なら yum install pv でインストールできます。RHEL/CentOS なら上記から RPM を入手してインストールします。
(例 1) 圧縮速度を測定し、終了時刻を予想する
pv /dev/sda &#124; gzip &#62; sda.gz
(例 2) 圧縮比を予測する
pv -cN read /dev/sda &#124; gzip &#124; pv -cN write &#62; /dev/null
-N : 名前をつける
-c : エスケープシーケンスを使って描画する
　　参照: http://www.catonmat.net/blog/unix-utilities-pipe-viewer/
(例 3) データフローの速度を規制する
pv -L 1m /dev/sda &#124; gzip &#62; /dev/null
2. bash のプロセス置換
bash にはプロセス置換という構文があり、プロセスの入出力をファイルのように取り扱うことができます(zsh 由来の機能)。
(1)&#62;(list)
プロセスへの書き込みをファイルとして取り扱うことができます。tee と組み合わせて、パイプラインを分岐させるのが典型的な用途です。
(例 1) [...]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=27</wfw:commentRss>
		</item>
		<item>
		<title>mysql SQL シェルコマンドの TIPS</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=25</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=25#comments</comments>
		<pubDate>Sat, 12 Jul 2008 15:29:48 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=25</guid>
		<description><![CDATA[pager, &#8211;safe-updates
mysql でクエリの結果を表示する pager には &#8220;less -S&#8221; がおすすめですが、すこし古い less だと、UTF-8 の処理がいまいちだったりするので、新しい less (Version 406 以降)を使うのがよいでしょう。
また、事故を防ぐために、つねに&#8211;safe-updatesオプションを使うのは良い考えです。
そうすると、コマンドラインが
% mysql -h localhost -u username &#8211;password=secret \
&#8211;pager=&#8221;/some/where/less-408 -S&#8221; \
&#8211;default-character-set=utf8 \
&#8211;safe-updates dbname
のように長くなるので、シェルの alias/function に登録するなどしておきます。
まあこのあたりはだれでもやることですね。
mysql のプロンプトをカスタマイズ
mysql のデフォルトのプロンプトは &#8220;mysql&#62;&#8221; という素っ気無いものですが、環境変数 MYSQL_PS1 で変えることができます。
たとえば
% MYSQL_PS1=&#8217;MySQL \v \u@\h/\d [\R:\m:\s] \nmysql \c&#62; &#8216;
とすると、
MySQL 5.0.45 root@localhost/tmpdb [09:08:14]
mysql 4&#62;
のようになります。バックスラッシュシーケンスの意味は以下のとおり。
\v version
\u username
\h server host
\d default database
\R hour (00-24)
\m min
\s sec
\n [...]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=25</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript で sleep するには?</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=17</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=17#comments</comments>
		<pubDate>Mon, 25 Jun 2007 13:57:38 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web]]></category>

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

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=17</guid>
		<description><![CDATA[JavaScript で時間待ちをしたい場合、
function busywait(sec) {
    alert(&#8221;ループを開始します&#8221;);
    var start = new Date;
    while (1) {
        var cur = new Date;
        if (sec * 1000 &#60;= cur.getTime() - start.getTime()) {
            break;
        }
    }
    alert(&#8221;ループを終了します。&#8221;);
}
 のような単純なビジーウエイトをすると、ブラウザがセキュリティエラーを出す場合があります。
サーバに PHP や CGI のコードを設置することができる場合、XMLHttpRequest を使って応答を待つことにより、ウェイトを挿入することができます。
クライアント側
function sleep(sec) {
    alert(&#8221;サーバにリクエストを投げます&#8221;);
    var start = new Date;
    var dummy = new Ajax.Request(
                                 &#8217;sleep.php&#8217;,
        {           method: &#8216;get&#8217;,
                    parameters: &#8217;s=&#8217; + [...]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=17</wfw:commentRss>
		</item>
		<item>
		<title>CGI PHP でファイルアップロード</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=11</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=11#comments</comments>
		<pubDate>Mon, 25 Jun 2007 11:30:10 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=11</guid>
		<description><![CDATA[PHP ではファイルアップロードの処理は非常に簡単です。
基本的には、マニュアルにあるとおり、
&#60;form enctype=&#8221;multipart/form-data&#8221; action=&#8221;upload.php&#8221; method=&#8221;POST&#8221;&#62;
  &#60;input name=&#8221;userfile&#8221; type=&#8221;file&#8221; /&#62;
  &#60;input type=&#8221;submit&#8221; value=&#8221;Send File&#8221; /&#62;
&#60;/form&#62;
というフォームから、
if (move_uploaded_file($_FILES[&#8216;userfile&#8217;][&#8216;tmp_name&#8217;], $uploadfile)) {
    echo &#8220;File is valid, and was successfully uploaded.\n&#8221;;
} else {
    echo &#8220;Possible file upload attack!\n&#8221;;
}
というコードを呼び出すだけです。
たいていはこれで間に合いますが、

ファイルをアップロードするテンポラリディレクトリ1  を動的に変えたい
テンポラリディレクトリと最終アップロード先が別パーティションにあるが、無駄なコピーが許せない
テンポラリファイルのファイル名を自分で決めたい
アップロード中に何らかの処理を行いたい

などという場合は、自前で CGI スクリプトを書くことになります。性能が求められる場合、CGI.pm なども使わず、POST データを自前で処理することになります。CGI には POST データの中身が標準入力として与えられます。その中身は multipart/form-data というもので、このようになっています。
RFC1867 Form-based File Upload in HTML (元になっているのはRFC2049)
Content-type: multipart/form-data, boundary=AaB03x
&#8211;AaB03x
content-disposition: form-data; name=&#8221;field1&#8243;
Joe Blow
&#8211;AaB03x
content-disposition: form-data; name=&#8221;pics&#8221;; filename=&#8221;file1.txt&#8221;
Content-Type: [...]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=11</wfw:commentRss>
		</item>
		<item>
		<title>Windows (NTFS) でシンボリックリンクを作成するには?</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=10</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=10#comments</comments>
		<pubDate>Sat, 23 Jun 2007 13:51:54 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=10</guid>
		<description><![CDATA[リンク/ジャンクション作成ツールを使うと簡単です。
]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=10</wfw:commentRss>
		</item>
		<item>
		<title>異なるマシン間で、ハードリンクを保存しつつデータをコピーするには?</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=8</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=8#comments</comments>
		<pubDate>Sat, 23 Jun 2007 12:47:12 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=8</guid>
		<description><![CDATA[
NFS + cp -al
少なくとも Linux システム間であれば、ハードリンクだけでなく、ブロックデバイス・キャラクタデバイス・名前つきパイプ(FIFO)・UID (数値マッピング)なども、ただしく保存してコピーできる。バックアップ対象ホストから disk を export して、バックアップサーバ側で mount するほうがよい。
rsync の -H (&#8211;hard-links)オプションを使う
ただし、このオプションは非常に遅い。また、通常、パーティション全体に対して rsync を実行することになるため、大量のメモリを必要とする。
たとえば、CentOS 5 を標準インストールすると、約 100K のファイルが作成される。これを 10 世代分・10 台分バックアップすると、ファイル数は 10M となる(i-node の消費数はずっと少ない)。rsync は 1 ファイルあたり約 100 バイトのメモリを必要とするため、rsync を実行するホストでは 10M * 100 バイト = 1G バイトのメモリが必要である。

rsync は内部的に相対ディレクトリでパス名情報を保持しているらしく、ディレクトリ階層が深いのは、メモリ消費量には影響しないようです。
rsync のバッチモードを使っても、アルゴリズムは同じなので、ピークのメモリ必要量は、あまり変わらないと予想されます。
メモリアクセスが連続的になるアルゴリズムらしく、swap out しても、さほど性能は落ちないので、swap を大きく取っておけばなんとかなるようです。


補足: 上記では rsync のメモリ消費は?100byte/file と書きましたが、実際もほぼそんなところです。8.3M 個のファイルがあるディレクトリツリーを rsync すると、転送元・転送先のそれぞれで、最大 680MB のメモリを消費しました。すなわち [...]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=8</wfw:commentRss>
		</item>
		<item>
		<title>ハードリンクがたくさんあると、ファイル操作が遅くなる?</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=7</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=7#comments</comments>
		<pubDate>Sat, 23 Jun 2007 12:43:01 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=7</guid>
		<description><![CDATA[削除に関しては、原理上、(少なくとも古典的な UNIX のファイルシステムでは)i-node のリンクカウントを -1 するだけなので、遅くなりません。むしろ、データ領域の bitmap に対する操作が不要なぶん、速くなります。
参照: システムプログラム概論 - ファイルシステム 1 2
実験: サンプルとして、

総ディレクトリ数 2221
階層数 3
ファイルサイズ 1000 バイト
総ファイル数 28060
ディスク領域 237MB

というディレクトリツリーを作成する。これを、cp -a と cp -al でそれぞ れ 30 セット複製する。1 セットを削除するのに要する時間は、

cp -a (実体)            9.6 秒
cp -al (リンク)         3.6 秒

となり、ハードリンクを削除するほうがずっと速い。
大量のハードリンクがあると遅くなる操作の例としては、du があります。du はリンクを二重カウントしないように i-node を追跡するため、大量のハードリンクがあると動作が遅くなります。
]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=7</wfw:commentRss>
		</item>
		<item>
		<title>URL の最大長は何文字?</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=6</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=6#comments</comments>
		<pubDate>Sat, 23 Jun 2007 12:29:47 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[ネットワーキング]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=6</guid>
		<description><![CDATA[ユーザーエージェントおよびサーバの実装に依存します。スキーム、ホスト名を含めて、255 バイト以下は安全です。メジャーなブラウザとサーバに限定すれば、2000 バイト程度までは使えるでしょう。

SGML では 1024 文字
HTML のスーパーセットである SGML では、LITLEN=1024 文字とされています。
RFC2070 &#124; URL の長さの制限って &#124; HTML 4のSGML宣言
HTML 4.01 では 65536 文字
HTML 4.01 では LITLEN=65536 文字です。
HTTP では未定義、255 バイト以下を推奨
RFC2616 (HTTP/1.1) には、URL の長さに関する規定はありません。ただし、
Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or プロキシ(proxy) implementations might not properly support these lengths.
と、255 バイト以下が推奨されています。
Internet Explorer [...]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=6</wfw:commentRss>
		</item>
		<item>
		<title>proftpd chroot jail</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=5</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=5#comments</comments>
		<pubDate>Sat, 23 Jun 2007 12:08:36 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[ネットワーキング]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=5</guid>
		<description><![CDATA[Q: proftpd で、

グループ vm または virtual に属するメンバーは chroot jail する。
ただし、users グループに属するメンバーは chroot jail しない。

とするための設定方法は?
A:
(1) 間違った設定方法
DefaultRoot ~ virtual,vm,!users
これだと、virtual AND vm AND (NOT users) という意味になる。
(2) 正しい設定方法
DefaultRoot ~ vm, !users
DefaultRoot~ virtual, !users
つまり、
 (vm OR virtual) AND (NOT users)
という論理式を、
(vm AND (NOT users)) OR (virtual AND (NOT users))
と展開するわけである。
上記 2 つを実際にやってみると:
=======================================
users   vm      virtual (1)  [...]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=5</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 第一印象</title>
		<link>http://www.connect-i.co.jp/tipsblog/?p=4</link>
		<comments>http://www.connect-i.co.jp/tipsblog/?p=4#comments</comments>
		<pubDate>Sat, 23 Jun 2007 12:04:40 +0900</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[BLOG]]></category>

		<guid isPermaLink="false">http://www.connect-i.co.jp/tipsblog/?p=4</guid>
		<description><![CDATA[
WYSIWIG 風エディタは結構使いやすい。特に複数回の UNDO ができるのがよい。
でも font タグをたくさん埋め込むのはやめてほしい
勝手に顔文字になってしまうのはやめてほしい
テーマによっては、箇条書き(番号つきリスト)は、preview と公開ページで番号が変わってしまう
パラグラフの前後の垂直スペースは、もう少し小さくしたい。(これは簡単に変更できそうだ)
もうちょっとさくさく動かんものか。
結局、AreaEditor + Meadow で、HTML タグを手打ちしている
Footnote はないのか? と思ったらプラグインがあった。 2.0 用だが、2.2 でも使えた。1
バージョン管理機能はないのか?
やっぱり Pukiwiki の方が…。

 こういう風に使う  [&#8617;]]]></description>
		<wfw:commentRss>http://www.connect-i.co.jp/tipsblog/?feed=rss2&amp;p=4</wfw:commentRss>
		</item>
	</channel>
</rss>
