<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>yuryu.jp</title>
	<atom:link href="http://yuryu.jp/feed/" rel="self" type="application/rss+xml" />
	<link>http://yuryu.jp</link>
	<description>life with open mind</description>
	<lastBuildDate>Tue, 31 Jan 2012 14:58:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/feed/" />
		<item>
		<title>MySQL バックアップスクリプト</title>
		<link>http://yuryu.jp/blog/2012/01/31/mysql-%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql-%25e3%2583%2590%25e3%2583%2583%25e3%2582%25af%25e3%2582%25a2%25e3%2583%2583%25e3%2583%2597%25e3%2582%25b9%25e3%2582%25af%25e3%2583%25aa%25e3%2583%2597%25e3%2583%2588</link>
		<comments>http://yuryu.jp/blog/2012/01/31/mysql-%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 13:57:21 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[パソコン]]></category>
		<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=144</guid>
		<description><![CDATA[MySQL は世界で最も使われている RDBMS の一つですが、問題となるのが定番のバックアップ方法がないということです。 mysqldump を使うと大まかにはバックアップが取れるのですが、InnoDB と MyISA &#8230; <a href="http://yuryu.jp/blog/2012/01/31/mysql-%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>MySQL は世界で最も使われている RDBMS の一つですが、問題となるのが定番のバックアップ方法がないということです。 <code>mysqldump</code> を使うと大まかにはバックアップが取れるのですが、InnoDB と MyISAM が混ざっていたりするとそれぞれトランザクションが使えたり使えなかったり、色々とややこしいです。</p>
<p>そこで、データベースごとに <code>--single-transaction</code> を使うか、 <code>--lock-tables</code> を使うか切り替えて、複数のデータベースを一気にダンプする PowerShell スクリプトを書きました。</p>
<p><span id="more-144"></span></p>
<p>シェルから実行すると、実行したディレクトリに backup-DBNAME.sql というファイルがデータベースごとに生成されます。</p>
<p>MyISAM の場合はテーブルロック、InnoDB の場合はトランザクションを作って読み取ります。ただし、もし MySQL の isolation 設定が READ-COMMITTED になっている場合は完全に一貫性のある状態ではなく、トランザクション単位で違う状態のデータが入る可能性があります。READ-COMMITTED で運用しているということは、それでも問題ないはずですが、一応注意が必要です。</p>
<p>MediaWiki はひとつのデータベースの中で、ほとんど InnoDB なのですがインデックスだけ MyISAM なので、テーブルロックで読み取ることになっています。</p>
<p>ちなみに、私が今使ってる運用では、データベースサイズはそんなに大きくありませんので、毎日このスクリプトでダンプしたものを zip で圧縮して、1週間分保存しています。増分バックアップしたい場合は、バイナリログを使うなどの方法があるようですが、詳しく調べられていません。</p>
<p>無保証ですが、参考までにお使いください。ライセンスはパブリックドメインです。</p>
<pre class="brush: powershell; title: ; notranslate">
$innodb_dbs = @(&quot;bamboo&quot;,&quot;confluence&quot;,&quot;crowd&quot;,&quot;jira&quot;)
$myisam_dbs = @(&quot;mediawiki&quot;)
$backup_user = &quot;backup&quot;
$backup_password = &quot;password&quot;
$mysqldump = &quot;C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe&quot;

$password_option = &quot;--password=&quot; + $backup_password
foreach($db in $innodb_dbs){
	&amp;&quot;$mysqldump&quot; -u $backup_user $password_option --quick --opt --single-transaction $db &gt; backup-$db.sql
}

foreach($db in $myisam_dbs){
	&amp;&quot;$mysqldump&quot; -u $backup_user $password_option --quick --opt --lock-tables $db &gt; backup-$db.sql
}

&amp;&quot;$mysqldump&quot; -u $backup_user $password_option --quick --opt --lock-tables --flush-privileges mysql &gt; backup-mysql.sql
</pre>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2012/01/31/mysql-%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2012/01/31/mysql-%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88/" />
	</item>
		<item>
		<title>謹賀新年</title>
		<link>http://yuryu.jp/blog/2012/01/02/new-year/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-year</link>
		<comments>http://yuryu.jp/blog/2012/01/02/new-year/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 16:09:10 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=142</guid>
		<description><![CDATA[新年おめでとうございます。 昨年は転職活動始めてみたものの中途半端になったり、空回りしたりと上手くいかないことも多かったです。今年は飛躍の年にしたいです。 この blog もぼちぼち更新していきますので、今後もどうぞよろ &#8230; <a href="http://yuryu.jp/blog/2012/01/02/new-year/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>新年おめでとうございます。</p>
<p>昨年は転職活動始めてみたものの中途半端になったり、空回りしたりと上手くいかないことも多かったです。今年は飛躍の年にしたいです。</p>
<p>この blog もぼちぼち更新していきますので、今後もどうぞよろしくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2012/01/02/new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2012/01/02/new-year/" />
	</item>
		<item>
		<title>Windows Server on Dell PowerEdge インストール記</title>
		<link>http://yuryu.jp/blog/2011/12/23/windows-server-on-dell-poweredge/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windows-server-on-dell-poweredge</link>
		<comments>http://yuryu.jp/blog/2011/12/23/windows-server-on-dell-poweredge/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 05:33:42 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=132</guid>
		<description><![CDATA[Windows Server 2008 R2 を Dell PowerEdge R210 II にインストールする機会があり、私なりに苦労したのでまとめてみます。 構成 本体 Dell PowerEdge R210 II &#8230; <a href="http://yuryu.jp/blog/2011/12/23/windows-server-on-dell-poweredge/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Windows Server 2008 R2 を Dell PowerEdge R210 II にインストールする機会があり、私なりに苦労したのでまとめてみます。</p>
<h2>構成</h2>
<table>
<tbody>
<tr>
<th>本体</th>
<td><a href="http://www.dell.com/jp/enterprise/p/poweredge-r210-2/pd">Dell PowerEdge R210 II</a></td>
</tr>
<tr>
<th>RAIDカード</th>
<td><a href="http://www.lsi.com/channel/japan/products/storagecomponents/Pages/MegaRAIDSAS9260-4i.aspx">LSI MegaRAID SAS 9260-4i</a></td>
</tr>
<tr>
<th>HDD</th>
<td>Seagate Cheetah 15k.7 600GB * 2 (RAID1)</td>
</tr>
<tr>
<th>OS</th>
<td>Windows Server 2008 R2 Standard Edition</td>
</tr>
<tr>
<th>リモート管理コンソール</th>
<td>DELL iDRAC6 Enterprise</td>
</tr>
<tr>
<th>起動モード</th>
<td>UEFI</td>
</tr>
</tbody>
</table>
<p><span id="more-132"></span></p>
<p>私にとっては、初 SAS RAID、初 UEFI、初iDRAC6、初 Windows Server 2008 R2 と初体験だらけでした。</p>
<h2>RAID カード設定</h2>
<p>LSI MegaRAID は、起動時に WebBIOS という設定画面が使えますが、これが起動しませんでした。 Preboot CLI は使えるんですが、これはドキュメントがなく、ヘルプを出しても説明なしにコマンドの羅列だけ5画面ぐらいスクロールするので、使い物になりません。途方にくれました。</p>
<p>まず、 <a href="http://www.freedos.org/">FreeDOS</a> を使ってファームウェアアップデートを試みました。 <a href="http://orz.kakiko.com/kaeru/usbboot/dos_boot_usb_memory.html">USB メモリにインストールする方法</a> を参考にしました。ただ、Disk Explorer を使うのではなく、 .iso イメージを仮想ドライブとしてマウントすると、中にファイルシステムが見えるのでそれを使いました。 KERNEL.SYS と COMMAND.COM の2つで動きます。 コマンドの出力が長いので、 MORE.EXE も入れておいたほうが無難だと思います。</p>
<p>次にファームウェアのアップデートです。 LSI の Web はナビゲーションがわかりづらいですが、必要なのは最新版のファームウェアと、 DOS 用の MegaCLI です。 USB メモリのルートディレクトリに必要なファイルをコピーします。 <del>更新方法は <a href="http://kb.lsi.com/KnowledgebaseArticle16044.aspx">LSI の Knowledge Base</a> に書かれています。 -NoVerChk はダウングレードの時にしか必要じゃないっぽいので</del><ins><a href="<a href="http://kb.lsi.com/KnowledgebaseArticle16601.aspx">更新のためのオプションは LSI の Knowledge Base</a>に書かれています。</ins></p>
<pre>megacli -adpfwflash -f mr2108fw.rom -a0
megacli -adpfacdefset a0</pre>
<p>で大丈夫です。<del>工場出荷時設定に戻さないとシステム起動しなくなるとか怖いこと書いてあるので、従ったほうが無難です。私はうっかり忘れましたが大丈夫でした。</del><ins>ダウングレードの時の話みたいです。</ins>ファームウェアを上げれば WebBIOS 使えるようになるかなと思って試したんですけど、だめでした。もし積極的に上げる理由がなければ、触らなくてもいいかもしれません。</p>
<p>で、再起動したら次はアレイの構築です。これも MegaCLI を使って行います。参考にしたのは <a href="http://hwraid.le-vert.net/wiki/LSIMegaRAIDSAS">HWRAID の Wiki</a> です。<a href="http://kb.lsi.com/KnowledgebaseArticle16516.aspx">MegaCLI のリファレンス</a>も参考になります。</p>
<p>まず、</p>
<pre>megacli -PDlist -a0</pre>
<p>でドライブ一覧を出力出力します。 DOS には grep なんて洒落たものはないので、目grep で「Enclosure Device ID:」と「Slot Number:」が含まれている行を探します。これがドライブの識別番号になります。台数多ければ、ログが USB メモリに保存されているので、それを持ってきて他の環境で grep したほうがいいでしょう。</p>
<p>次に</p>
<pre>megacli -CfgLdAdd -r1 [0:0,0:1] -a0</pre>
<p>のように、論理ボリュームを追加します。 0:0 となっている左側が Enclosure Device ID 、右側が Slot Number です。私の場合は Enclosure Device ID は 252、 Slot Number は 0 と 1 でした。環境によって異なると思います。 -r の後に来るのが RAID レベルです。 -r0 だと RAID 0 になります。その他はデフォルト設定で、ディスクの全容量を使ってアレイが構築されます。細かい設定は Windows が起動してから確認しようと思いました。</p>
<p>デフォルトでは RAID カードにバッテリがつながっていないと、書き込みキャッシュが無効になっています。私は UPS つなげているので、書き込みキャッシュを有効にしました。</p>
<pre>megacli -LDSetProp CachedBadBBU -LALL -a0</pre>
<p>これで有効になります。無効にするときは <code>-LDSetProp NoCachedBadBBU</code> です。</p>
<p>以上で Windows のインストーラーから認識できる論理ボリュームが完成しました。次に、 OS のインストールに移ります。</p>
<h2>Windows Server のインストール</h2>
<p>iDRAC6 には、ネットワーク越しに仮想的に CD/DVD を認識させる仮想メディア機能がついています。これを使いました。</p>
<p>仮想メディア機能で、OS ディスクをマウントします。これでサーバーをリセットすると、 Windows のインストーラーが起動します。この時に UEFI モードにしておかないと、 UEFI 対応としてインストールされません。なお、 Windows Server 2008 R2 のインストーラーは特に追加のドライバ無しで、RAID アレイを認識しました。</p>
<p>ドライブの選択画面では、未フォーマットのドライブがひとつ見えます。「ここに Windows をインストールすることはできません」のようなエラーメッセージが表示されますが、無視します。パーティションはお好みで切るといいですが、私はそのまま使いました。なお、<a href="http://technet.microsoft.com/ja-jp/library/dd744301(WS.10).aspx">UEFI では起動ドライブに管理用パーティションが２つ作成されます</a>。</p>
<p>あとは普通に OS がインストールされますが、再起動したら仮想メディアを終了させてください。ディスクをマウントしたままだとブートローダーのあとに「STOP 0xc0000178」でシステムが停止します。ぐぐるとディスクが読めないっぽいことが書かれていますが、原因がわからなくて2度もドライバ変えたりしてインストールしなおしました&#8230;</p>
<p>以上で OS が起動します。あとは Windows の世界です。おつかれさまでした。</p>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/12/23/windows-server-on-dell-poweredge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/12/23/windows-server-on-dell-poweredge/" />
	</item>
		<item>
		<title>サーバー用 HDD 事情 2011年年末バージョン</title>
		<link>http://yuryu.jp/blog/2011/12/14/server-hdd-status/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=server-hdd-status</link>
		<comments>http://yuryu.jp/blog/2011/12/14/server-hdd-status/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 14:37:07 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[パソコン]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=119</guid>
		<description><![CDATA[最近サーバーを構築する機会があったのですが、ストレージをどう用意したらいいのかさっぱりわからなかったので、だいぶ苦労しました。苦労した内容をまとめてみます。 SAS vs SATA SASの特徴: 速い、高信頼、高い S &#8230; <a href="http://yuryu.jp/blog/2011/12/14/server-hdd-status/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>最近サーバーを構築する機会があったのですが、ストレージをどう用意したらいいのかさっぱりわからなかったので、だいぶ苦労しました。苦労した内容をまとめてみます。</p>
<p><span id="more-119"></span></p>
<h2>SAS vs SATA</h2>
<p>SASの特徴: 速い、高信頼、高い<br />
SATAの特徴: 安い、安い、安い</p>
<p>これに集約されると思います。バックアップとして使うならともかく、メインのストレージとして利用するのに SATA は選択肢に入ってこないと思います。 Non-recoverable error rate だって SAS のほうが1桁低いです。</p>
<h2>SAS RAID事情</h2>
<p>サーバーで使うなら RAID 必須になってきます。今回はシャーシと予算の都合で HDD が2台しか入らないので、RAID 1 を構築することにしました。ところが、SATA と違ってぐぐってもさっぱり情報が見つかりません。</p>
<p>RAID にはソフトウェア RAID とハードウェア RAID がありますが、パフォーマンスを重視するならハードウェアRAID一択です。ただし、Dell の PERC H200 のようにキャッシュメモリが載っていない安物カードだと、パフォーマンスが全然出ませんので、きちんとキャッシュメモリが載っているものを選びましょう。1万5000円ぐらいから見つかります。RAID5 や 6 を構築するときは、おそらくコントローラーの性能がかなり響いてくると思うので、ここでけちってはいけません。</p>
<p>よく使われているメーカーは <a href="http://www.lsi.com/">LSI</a> か、<a href="http://www.adaptec.com/en-us/">Adaptec</a> だと思います。Adaptec は PMC という会社に買収されてしまいましたが、ブランドは残っています。</p>
<p>(2011/12/21 追記）<a href="http://ask.adaptec.com/scripts/jp_adaptec_itic.cfg/php.exe/enduser/std_adp.php?p_faqid=17106&#038;p_created=1307373673&#038;p_topview=1">Adaptec はまだ UEFI に対応していない</a>そうで、最近のマザーボードとの組み合わせだと起動しないかもしれません。私もはまりました。 LSI は対応しています。サーバー用だと LSI が最大勢力のようです。あと <a href="http://www.areca.com.tw/">Areca</a> というメーカーも最近メジャーで、チップは LSI なんですが DIMM を差し替えてキャッシュを 4GB まで増設できたりといった特徴があります。</p>
<p>お金が許すなら LSI Logic のほうが速いようです。Akiba PC Hotline! に <a href="http://akiba-pc.watch.impress.co.jp/hotline/20111112/sp_lsi0.html">現行最速クラスのRAIDカード「LSI MegaRAID SAS 9265-8i」を試す</a> という記事がありますので参考にしてください。</p>
<p>今回は <a href="http://www.adaptec.com/ja-jp/products/controllers/hardware/sas/value/sas-6405/">Adaptec RAID 6405</a> をチョイスしました。3万円強で買えます。</p>
<p>ちなみに Dell の PERC H シリーズは、LSI Logic のOEM だそうです。<a href="http://satospo.sakura.ne.jp/blog_archives/tech/hardware/dell_raid2.html">DELLサーバのRAIDコントローラ～その2～</a> が詳しいです。</p>
<h2>SAS ケーブル</h2>
<p>SAS は SATA と異なり、RAIDカードのコネクタとHDDのコネクタが一対一には対応しません。<br />
<a href="http://www.adaptec.com/ja-jp/products/cables/">Adaptec のケーブル一覧</a> に写真付きで載っていますが、だいたいは4叉(ファンアウト)ケーブルを使います。つまり、基本的にはRAIDカードのコネクタ1つにつきHDDが4台接続できるわけです。</p>
<p>LSI Logic も Adaptec も、メーカーサイトに、対応しているケーブルが書かれてあるので、それに従います。大体の場合、コントローラー側は <a href="http://www.pc-pitstop.com/sas_cables_adapters/sff-8087/">SFF-8087</a> というコネクタで、HDD 側は <a href="http://www.pc-pitstop.com/sas_cables_adapters/sff-8482/">SFF-8482</a> というコネクタになっています。</p>
<p>SATA と SAS の互換性ですが、SAS が SATA の上位互換になっています。SFF-8482 には SAS と SATA 両方の HDD が接続できます。SATA のコネクタには SAS HDD は接続できません。SAS のコネクタをよく見ると、電源部分とデータ部分の間にノッチがついています。これで識別しています。</p>
<p>SFF-8482 には single port 対応のものと dual port 対応のものがあります。dual port はその名の通り、信号線が2系統になっていて、電源部分とデータ部分のノッチに信号線が載っています。これを使うと、一台のHDDを複数のコントローラーに接続したりできるそうですが、自分で HDD 買ってくるような用途では使わないと思います&#8230;</p>
<h2>SAS HDD事情</h2>
<p>SAS に接続できるストレージには大きく分けて、3.5インチ HDD、2.5インチ HDD、SSD があります。</p>
<p>SSD は HDD じゃないだろうというツッコミはありますが、最近では HGST や Seagate などの HDD メーカーもどんどん発売しています。容量も 800GB 程度までありますので、資金が許すなら選択肢に入るのかも？ ただ、ぐぐっても売ってるところ見つからないので、普通には買えないのかもしれません。</p>
<p>3.5 インチと 2.5 インチですが、最近は徐々に 2.5 インチが幅を効かせているようです。といってもちょいと複雑で、単純には言えないところがあります。</p>
<p>まず、HDD の用途には二種類あって、ひとつは容量を稼ぐためのもの、もうひとつは性能も大事なものです。</p>
<p>容量を稼ぐ場合は、2TB とか 3TB の 3.5インチ HDD を使うのが良いようです。これらは SATA で普通に買える HDD と大差ありません。これは単純にディスク面積が広いほうが有利なので、 3.5 インチが使われています。</p>
<p>性能を稼ぐためには台数を増やすのが手っ取り早いので、10,000rpm 以上の 2.5 インチ HDD を複数台数用意するようです。消費電力も 2.5 インチのほうが小さいですし、例えば Seagate の場合は Cheetah 15K.7(3.5inch) より Savvio 15K.3(2.5inch) のほうがスペックが良いです。Cheetah 15k.7 が2009年の製品だというのもありますが&#8230; 新製品が発売されないということは、需要が減ってきているんでしょう。</p>
<p>あと、実は 3.5 インチといいつつ 10,000rpm 以上の HDD は、プラッタの大きさがかなり小さいですので、それだったら 2.5 インチシャーシでギリギリまで使うほうが良いという判断もありそうです。</p>
<p>性能と容量のバランスの良い、2.5インチ 10,000rpm HDD もあります。 Savvio 10K.5 は 900GB まで用意されています。3.5 インチの Cheetah より容量が多いです。新しい製品なので高密度なんでしょうね。</p>
<p>ちなみに今はタイ洪水のせいで、2.5 インチ HDD の入手性が悪いようです。あと私が勉強不足だったので、普通に Cheetah 15K.7 を注文してしまいました&#8230;</p>
<h2>RAID と UPS</h2>
<p>普通のパソコンだと UPS 積みませんが、 RAID カードを装着して、しかも大容量キャッシュが搭載されている場合だとバッテリバックアップは重要です。</p>
<p>大抵のファイルシステムは、突然電源断が起こっても一貫性を保ち、データの消失が発生しないように設計されています。デスクトップパソコンが UPS なくても安心して使えるのはこのためです。</p>
<p>しかし、これには「OS がディスクに書き込んだと思った内容は、確実に書きこまれている」という大前提があります。</p>
<p>RAID カードのキャッシュは、OSが「書きこめ」と言ったものもキャッシュして、高速化します。そのため、電源断が起こった際にデータの消失、ファイルシステムの破壊が起こる可能性があります。かと言って書き込みキャッシュを無効化してしまうと、 RAID カードの高速性が半減してしまいます。</p>
<p>RAID カードの中には自前でバックアップシステムを持っているものもありますが、結構なお値段がしますので、それだったら PC ごと UPS でバックアップしたほうが良いと思います。2万円ぐらいからありますし、APC の 1U 用でも管理ソフト込で5万円強です。</p>
<h2>まとめ</h2>
<p>SAS RAID カードはケチらない。ケーブルはメーカーの対応表とにらめっこ。 HDD はメインとしては 2.5インチ 10,000rpm ぐらいが容量、性能のバランスが良いが、洪水のせいで買えない。 UPS を付ける。</p>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/12/14/server-hdd-status/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/12/14/server-hdd-status/" />
	</item>
		<item>
		<title>only my railgun サビの和訳</title>
		<link>http://yuryu.jp/blog/2011/12/14/only-my-railgun/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=only-my-railgun</link>
		<comments>http://yuryu.jp/blog/2011/12/14/only-my-railgun/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 13:25:08 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[カラオケ]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=108</guid>
		<description><![CDATA[only my railgun をカラオケで歌ったところ、ネイティブに「英語部分の歌詞が意味不明」と言われたので、和訳してみました。 ただし私の英語力なので間違ってるかも。 Looking! The blitz loop &#8230; <a href="http://yuryu.jp/blog/2011/12/14/only-my-railgun/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>only my railgun をカラオケで歌ったところ、ネイティブに「英語部分の歌詞が意味不明」と言われたので、和訳してみました。<br />
ただし私の英語力なので間違ってるかも。</p>
<blockquote><p>Looking! The blitz loop this planet to search way, only my railgun can shoot it.</p></blockquote>
<p>loop の三単現 s がない気がしますが</p>
<p>見てる! 電撃戦が道を探すために、この惑星を輪にする。<br />
私のレールガンだけがそれを撃てる。</p>
<blockquote><p>Sparkling! The shiny lights awake true desire, &#8230;</p></blockquote>
<p>輝く! 眩しい光が本当の欲望を呼び起こす。 &#8230;</p>
<p>確かに意味が分からない。伝えたいこととは違う英語になっている気がする&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/12/14/only-my-railgun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/12/14/only-my-railgun/" />
	</item>
		<item>
		<title>イベント会場でモバイルWi-Fiを使ってはいけない理由</title>
		<link>http://yuryu.jp/blog/2011/12/03/mobile-wi-fi-should-be-avoided/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mobile-wi-fi-should-be-avoided</link>
		<comments>http://yuryu.jp/blog/2011/12/03/mobile-wi-fi-should-be-avoided/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 07:04:22 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[Wi-Fi]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=94</guid>
		<description><![CDATA[昨今ポケット Wi-Fi を始めとするモバイルWi-Fiルーターをお使いの方が増えています。日常とても便利なのですが、人が多く集まるイベント会場で使うと会場の無線LANが使えなくなり、迷惑になることがあります。 イベント &#8230; <a href="http://yuryu.jp/blog/2011/12/03/mobile-wi-fi-should-be-avoided/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>昨今ポケット Wi-Fi を始めとするモバイルWi-Fiルーターをお使いの方が増えています。日常とても便利なのですが、人が多く集まるイベント会場で使うと会場の無線LANが使えなくなり、迷惑になることがあります。</p>
<p>イベント会場に無線LANがある場合は、そちらを使うようにして、モバイルWi-Fiルーターの電源はOFFにしましょう。</p>
<p>ではなぜ、モバイルWi-Fiルーターを使ってはいけないのでしょうか？</p>
<p><span id="more-94"></span></p>
<h2>重ならずに使えるチャンネルは少ない</h2>
<p>2.4GHz の無線LANでは、1〜13チャンネルが使用出来ます。ところが、実際にはそれぞれ左右に2チャンネルずつ重なっているので、5チャンネル分専有してしまうのです(11g/11n では少し違いますが、やはり重なりがあります)。<br />
<a href="http://yuryu.jp/wp/wp-content/uploads/2011/12/799px-2.4_GHz_Wi-Fi_channels_802.11bg_WLAN.png"><img src="http://yuryu.jp/wp/wp-content/uploads/2011/12/799px-2.4_GHz_Wi-Fi_channels_802.11bg_WLAN.png" alt="チャンネルの幅より使用する周波数帯域が広いので、重ならずに使えるチャンネルは3チャンネルしかない" title="2.4_GHz_Wi-Fi_channels_(802.11b,g_WLAN)" width="799" height="186" class="alignnone size-full wp-image-95" /></a>(図は Michael Gauthier による)<br />
そのため、実際に同時に使えるチャンネル数は最大3チャンネルになってしまいます。「最大に」がポイントで、誰かが4チャンネルを使った場合は1チャンネルと6チャンネル、両方と干渉してしまうので、さらに効率は落ちてしまいます。</p>
<p>イベント会場では主催者が注意深く割り当てたチャンネルを使用すべきです。</p>
<h2>モバイルWi-Fiルーターは通信速度が悪い</h2>
<p>無線LANでは、ひとつの周波数を利用者全員で使用します。簡単にいえば 300Mbps を10人で使うと一人30Mbpsになります。ところが、低速で通信している人がいると、その人は多くの時間を使うので、他の人が使える時間が減ってしまいます。3Gの通信速度が遅い場合でも、無線LANが遅いと余分に時間がかかるので、やはり他の人が使える時間が減ってしまいます。</p>
<p>ポケットWi-Fiは、多くの機種で 54Mbps までの 11g しか対応していませんし、11n に対応した最新機種でも 72Mbps しか対応していません。一方、多くのノートパソコンは 11n の 144Mbps に対応しています。</p>
<p>会場内で高速なアクセスポイントが提供されている場合は、そちらを使うほうが電波の利用効率が上がります。</p>
<h2>アクセスポイントが増えると、余分な信号が増える</h2>
<p>無線LANのアクセスポイントは、誰もつながっていなくても1秒間に10回程度「ビーコン」と呼ばれる電波を出しています。これにはSSIDや通信速度など、APの情報が含まれています。</p>
<p>つまり、アクセスポイントが増えれば増えるほど、ビーコンが多くなって電波を無駄に使ってしまうのです。SSID をステルスにしても、SSIDが空になるだけで実際にはビーコンは出たままになっています。</p>
<p>さらに、無線LANクライアントがアクセスポイントの検索を行うと、検索パケットがアクセスポイントの数だけやり取りされてしまいますので、接続を行わなくても無駄に電波を使ってしまいます。</p>
<p>アクセスポイントの数は必要最低限にするのが、電波の利用効率向上につながります。</p>
<h2>会場では 5GHz 帯が使えることがある</h2>
<p>無線LANには大きく分けて 2.4GHz帯と 5GHz帯があります。<br />
周波数が過密なのは 2.4GHz帯で、5GHz帯は比較的余裕があるのですが、残念ながら一部を除いて屋外で使うことができません。そのため、モバイルWi-Fiルーターは2.4GHzのみの対応となっています。</p>
<p>もし会場で 5GHz帯のアクセスポイントが用意されていれば、2.4GHz帯との負荷分散を行うことができますので、収容人数が格段に上がります。</p>
<h2>まとめ</h2>
<p>無線LANは電波を使います。電波は空間に均等に広がっていくので、どうしてもお互いに影響を及ぼします。限られた周波数をできるだけ効率良く使うことが、みんなの幸せにつながります。</p>
<p>イベント会場では、モバイルWi-Fiルーターの電源はお切りいただき、会場の無線LANをお使いください。</p>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/12/03/mobile-wi-fi-should-be-avoided/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/12/03/mobile-wi-fi-should-be-avoided/" />
	</item>
		<item>
		<title>memtest64 開発メモ</title>
		<link>http://yuryu.jp/blog/2011/11/24/memtest64-%e9%96%8b%e7%99%ba%e3%83%a1%e3%83%a2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=memtest64-%25e9%2596%258b%25e7%2599%25ba%25e3%2583%25a1%25e3%2583%25a2</link>
		<comments>http://yuryu.jp/blog/2011/11/24/memtest64-%e9%96%8b%e7%99%ba%e3%83%a1%e3%83%a2/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 15:54:42 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=88</guid>
		<description><![CDATA[memtest86 という有名なメモリチェッカがあるんですが、これ 64bit に対応していません。 PAE には対応しているので、64GB までのメモリチェックは出来るんですが、お陰で結構複雑なコードになってるし、メモ &#8230; <a href="http://yuryu.jp/blog/2011/11/24/memtest64-%e9%96%8b%e7%99%ba%e3%83%a1%e3%83%a2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>memtest86 という有名なメモリチェッカがあるんですが、これ 64bit に対応していません。<br />
PAE には対応しているので、64GB までのメモリチェックは出来るんですが、お陰で結構複雑なコードになってるし、メモリアクセスは 32bit なので遅い&#8230; ということで、64bit 移植に挑戦してみようと思いました。</p>
<p>ところがブートローダーってまともに書いたことが無いので、さっぱりわかりません。<br />
ある程度まとまってきたので、自分用に調査メモを残します。</p>
<p><span id="more-88"></span></p>
<h2>全般的な情報</h2>
<p><a href="http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html">Intel® 64 and IA-32 Architectures Software Developer Manuals</a><br />
リファレンスといえば Intel です。 AMD64 なんですが、ドキュメントは Intel のほうが親切な気がするので、こっちを読んでます。迷ったらこれ、です。</p>
<p><a href="http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/">Linux i386 Boot Code HOWTO</a><br />
i386 向けですが、Linux のブートコードの解説です。<br />
memtest86 もブートローダーは Linux のを借りているので、勉強になります。</p>
<p><a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=tree;f=arch/x86/boot">Linux のブートローダー</a><br />
memtest86 のブートローダーの元です。<br />
バージョンが変わってるのでかなり変わってますが、参考になります。</p>
<p><a href="http://www.gnu.org/software/grub/">GRUB</a><br />
GNU のブートローダーです。<br />
ライセンスは GPLv3 なので、Linux 関係のコードと混ぜられませんが、勉強にはなります。</p>
<p><a href="http://wiki.osdev.org/Entering_Long_Mode_Directly">Entering Long Mode Directly</a><br />
Long mode に入るには protected mode を経由しないとだめなんですが、手順を一部省略する方法が書かれています。<br />
どれぐらい安全なのかはわかりませんが&#8230;</p>
<h2>メモリ情報</h2>
<p>メモリ情報は、OS が起動している状態だと OS がよしなにやってくれますが、起動した状態だとどの物理アドレスが使えるのかもわかりません。</p>
<p><a href="http://wiki.osdev.org/Detecting_Memory_%28x86%29">Detecting Memory (x86)</a><br />
メモリ情報は BIOS の E820 というコールを使うのがよさそうです。<br />
2002年以降の BIOS だと使えるようなので、x64 対応の CPU が載ってるマシンだとほぼ問題ないでしょう。</p>
<p><a href="http://en.wikipedia.org/wiki/X86-64#Page_table_structure">x86-64 Page table structure</a><br />
Wikipedia のページテーブル関係の記述です。プログラマ向けじゃないので情報量は少ないですが、あらすじはわかります。</p>
<p><a href="http://wiki.osdev.org/Memory_Map_%28x86%29">Memory Map (x86)</a><br />
典型的なメモリマップが載ってます。E820 で情報取るまでは決め打ちでメモリを使うしかないので、参考にします。</p>
<h2>その他メモ</h2>
<ul>
<li>E820 は long mode からは呼べないので、それまでにマップを取得する必要がある。</li>
<li>startup_32 と startup_64 というエントリが結構キーポイントっぽい。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/11/24/memtest64-%e9%96%8b%e7%99%ba%e3%83%a1%e3%83%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/11/24/memtest64-%e9%96%8b%e7%99%ba%e3%83%a1%e3%83%a2/" />
	</item>
		<item>
		<title>Rails はじめました</title>
		<link>http://yuryu.jp/blog/2011/08/04/rails-%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rails-%25e3%2581%25af%25e3%2581%2598%25e3%2582%2581%25e3%2581%25be%25e3%2581%2597%25e3%2581%259f</link>
		<comments>http://yuryu.jp/blog/2011/08/04/rails-%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 15:29:55 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=84</guid>
		<description><![CDATA[Rails ずっとやったことなくて、このままじゃいけない気がしたので勉強を始めました。 まずは 公式サイトのチュートリアル をやっています。コマンドを打つだけで色々ファイルが生成されて、魔法みたいですね。 本では が良さ &#8230; <a href="http://yuryu.jp/blog/2011/08/04/rails-%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Rails ずっとやったことなくて、このままじゃいけない気がしたので勉強を始めました。<br />
まずは <a href="http://guides.rubyonrails.org/getting_started.html">公式サイトのチュートリアル</a> をやっています。コマンドを打つだけで色々ファイルが生成されて、魔法みたいですね。</p>
<p>本では <a href="http://www.amazon.co.jp/Ruby-Rails-アプリケーションプログラミング-山田-祥寛/dp/4774146633?SubscriptionId=AKIAJZYEMGXTOZQVAREA&tag=yuryu-22" target="_blank" rel="nofollow" title="" >Ruby on Rails 3 アプリケーションプログラミング</a> が良さそう。チュートリアル終わったら欲しいな。</p>
<p>がんばるよー。</p>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/08/04/rails-%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/08/04/rails-%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/" />
	</item>
		<item>
		<title>Ackermann function</title>
		<link>http://yuryu.jp/blog/2011/07/28/ackermann-function/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ackermann-function</link>
		<comments>http://yuryu.jp/blog/2011/07/28/ackermann-function/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 16:44:42 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=74</guid>
		<description><![CDATA[アッカーマン関数という関数があります。 バカ正直に計算しようとするとすぐ計算量が膨大になり、計算できなくなるたぐいの関数です。 これをアセンブリでバカ正直に計算させるコードを書いてみました。階乗を計算させるコードのおまけ &#8230; <a href="http://yuryu.jp/blog/2011/07/28/ackermann-function/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%83%E3%82%AB%E3%83%BC%E3%83%9E%E3%83%B3%E9%96%A2%E6%95%B0">アッカーマン関数</a>という関数があります。<br />
バカ正直に計算しようとするとすぐ計算量が膨大になり、計算できなくなるたぐいの関数です。</p>
<p>これをアセンブリでバカ正直に計算させるコードを書いてみました。階乗を計算させるコードのおまけ付きです。</p>
<p>実際に実行させたところ、ack(3, 12) あたりになるとスタックがあふれました。<br />
スタックサイズを調整すればもうちょっといけると思います。</p>
<p>使用した高速化のテクニック</p>
<ul>
<li>末尾再帰を CALL から JMP に置き換え</li>
<li>TEST+JE でmacro fusion できる命令形式にした</li>
<li>INC / DEC を ADD / SUB に置き換えて、フラグレジスタの依存関係を解消</li>
<li>MOV RDX, 1 を MOV EDX, 1 にして命令長を短縮</li>
</ul>
<pre class="brush: plain; title: ; notranslate">
    .code

ack PROC public

    ; RCX = m, RDX = n
    TEST    RCX, RCX
    JE      m_zero

    TEST    RDX, RDX
    JE      n_zero

    PUSH    RCX
    SUB     RDX, 1
    CALL    ack
    POP     RCX
    SUB     RCX, 1
    MOV     RDX, RAX
    JMP     ack

n_zero:
    MOV     EDX, 1
    SUB     RCX, 1
    JMP     ack

m_zero:
    MOV     RAX, RDX
    ADD     RAX, 1
    RET

    ack ENDP

factorial PROC public

    MOV     EAX, 1
    CMP     RCX, 1
    JLE     f_ret

f_loop:
    IMUL    RAX, RCX
    SUB     RCX, 1
    CMP     RCX, 1
    JNLE    f_loop

f_ret:

    RET

    factorial ENDP

    END
</pre>
<p>一応 C で書いた以下のコードよりは、3割ぐらい速いようです(Visual C++ 2010 で /O2 としてコンパイル)。階乗は微妙に速いだけでほとんど変わりませんでした。CPU は Penryn ベースの Core2 Duo です。</p>
<pre class="brush: cpp; title: ; notranslate">
int64_t factorial_c(int64_t n)
{
    int64_t r = 1;
    while(n &gt; 1) r *= n--;
    return r;
}

int64_t ack_c(int64_t m, int64_t n)
{
    return m == 0 ? n + 1 : n == 0 ? ack_c(m - 1, 1) : ack_c(m - 1, ack_c(m, n - 1));
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/07/28/ackermann-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/07/28/ackermann-function/" />
	</item>
		<item>
		<title>Bogosort</title>
		<link>http://yuryu.jp/blog/2011/07/25/bogosort/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bogosort</link>
		<comments>http://yuryu.jp/blog/2011/07/25/bogosort/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 14:01:34 +0000</pubDate>
		<dc:creator>Yuryu</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://yuryu.jp/?p=63</guid>
		<description><![CDATA[世の中にはボゴソート というソートアルゴリズムがあります。ランダムにシャッフルして、順番に並んでいたらソート完了というものです。 魔が差したので実装してみました。 ところで、ボゴソートは完全な乱数を使用した場合にはアルゴ &#8230; <a href="http://yuryu.jp/blog/2011/07/25/bogosort/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>世の中には<a href="http://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%B4%E3%82%BD%E3%83%BC%E3%83%88">ボゴソート</a> というソートアルゴリズムがあります。ランダムにシャッフルして、順番に並んでいたらソート完了というものです。</p>
<p>魔が差したので実装してみました。</p>
<p>ところで、ボゴソートは完全な乱数を使用した場合にはアルゴリズムが完了することが保証されていますが、疑似乱数には周期があるため同じ状態が繰り返し、完了しない場合があります。メルセンヌツイスタ MT19937 を利用した場合、周期は 2^19937-1 で、およそ 10^6001 です。</p>
<p>一方ボゴソートの平均計算量は O(n * n!) らしいので、<del>138 * 138! = 9.55 * 10^238、つまり 138 要素ぐらいまでならメルセンヌツイスタぐらいの周期を持つ乱数でそろう可能性が高い(50%を越える)ということになります。</del><ins>だいたい計算してみると 2080 * 2080! = 10^6004 ぐらいとのことなので、2079 要素ぐらいまでならメルセンヌツイスタぐらいの周期を持つ乱数でそろう可能性が高い(50%を越える)ということになります。</ins></p>
<p>32bit の線形合同法(普通の rand() 関数)の場合は、最大周期が 2^32-1 なので、わずかに11要素ぐらいまでしかソートできず、それを越えると永久にソートできない可能性が高くなります。</p>
<p>メルセンヌツイスタのような、非常に周期が長いと言われる乱数を利用しても数<del>百</del><ins>千</ins>要素までしかソートできないなんて、ボゴソートは恐ろしいですね。</p>
<p>ちなみに 138要素の場合でも、1秒間に1京回計算できる計算機を使っても、完了までに 10^215年以上かかることになり、宇宙の寿命が先に尽きてしまいます。<br />
<ins>2000要素とかどんだけかかるのかな&#8230;</ins></p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
#include &lt;boost/timer.hpp&gt;
#include &lt;boost/random.hpp&gt;
#include &lt;algorithm&gt;
#include &lt;ctime&gt;
#include &lt;boost/foreach.hpp&gt;

class Random
{
public:
  boost::mt19937 gen;
  boost::uniform_int&lt;int&gt; dst;
  boost::variate_generator&lt; boost::mt19937, boost::uniform_int&lt;int&gt; &gt; rand;
  Random( int N ):// call instance:
    gen( static_cast&lt;unsigned long&gt;(std::time(nullptr)) ), dst( 0, N ), rand( gen, dst ) {
  }
  std::ptrdiff_t operator()( std::ptrdiff_t arg ) {
    return static_cast&lt; std::ptrdiff_t &gt;( rand() );
  }
};

template &lt;class InputIter, class Rand&gt;
void bogosort(InputIter first, InputIter last, Rand rand){
  while(!std::is_sorted(first, last))
    std::random_shuffle(first, last, rand);
}

template &lt;class InputIter&gt;
void bogosort(InputIter first, InputIter last){
  while(!std::is_sorted(first, last))
    std::random_shuffle(first, last);
}

int main(int argc, int argv[])
{
  std::vector&lt;int&gt; a;

  while(true){
    int i = 0;
    std::cin &gt;&gt; i;
    if(std::cin.eof() || std::cin.fail()) break;
    a.push_back(i);
  }
  Random rand(a.size());
  boost::timer timer;
  bogosort(a.begin(), a.end(), rand);
  std::cout &lt;&lt; &quot;time = &quot; &lt;&lt; timer.elapsed() &lt;&lt; std::endl;
  BOOST_FOREACH(int i, a){
    std::cout &lt;&lt; i &lt;&lt; &quot;, &quot;;
  }
  std::cout &lt;&lt; std::endl;
  return 0;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://yuryu.jp/blog/2011/07/25/bogosort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://yuryu.jp/blog/2011/07/25/bogosort/" />
	</item>
	</channel>
</rss>

