<?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>DailyHckr</title>
	<atom:link href="http://hylom.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://hylom.net</link>
	<description>Hack, Hacker, Hackest</description>
	<lastBuildDate>Tue, 24 Aug 2010 17:04:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>あまり知られてない（ような気がする）sshの多重接続</title>
		<link>http://hylom.net/2010/08/25/ssh-multiple-conection/</link>
		<comments>http://hylom.net/2010/08/25/ssh-multiple-conection/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 17:02:08 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1307</guid>
		<description><![CDATA[　OpenSSH 5.6/5.6p1リリースの記事をチェックしているとき、リリースノートの「多重（multiplex）接続」ってなんじゃこれ、と思い調べてみたんですが、なかなかに有用なのでちょいとまとめてみました。というか、元ネタはこちらのSSH: Tips And Tricks You Needという記事です。
　多重接続というのは、1本のSSHコネクションで複数のセッションを同時に張るという感じのもの。たとえば、OS Xでターミナルを複数開き、それぞれのターミナルウィンドウで1つのサーバーに対しsshコマンドで接続を行った場合、通常はサーバー側では複数のsshdが起動し、それぞれのsshクライアントと通信を行います。いっぽう、多重接続を利用すると1つのsshdが複数のsshと通信する形となり、サーバー側のリソースをより効率的に利用できる、というわけ。
　設定は簡単で、クライアント側の.sshディレクトリに設定ファイルと一時ディレクトリを用意するだけ。

$ cd ~/.ssh
$ mkdir connections
$ chmod 700 connections/
$ vim config

　~/.ssh/configの内容は下記のとおり。

Host *
ControlMaster auto
ControlPath ~/.ssh/connections/%r_%h_%p

　あとは、通常通りsshでサーバーに接続するだけ。これだけで、体感できるほど2つめ以降の接続が高速化されます。下記は5つのSSHセッションを張った状態で、6つめのセッションを張ろうとした際の実行速度ベンチマーク。

多重化なし：
$ time ssh hylom.******.com uptime
 08:13:53 up 22 days, 10:18,  6 users,  load average: 0.00, 0.00, 0.00

real	0m2.123s
user	0m0.015s
sys	0m0.010s


多重化あり：
Last login: Tue Aug 24 17:15:34 on ttys006
$ time ssh hylom.******.com uptime
 08:18:53 up 22 days, 10:23,  [...]]]></description>
			<content:encoded><![CDATA[<p>　<a href="http://sourceforge.jp/magazine/10/08/24/0758204">OpenSSH 5.6/5.6p1リリース</a>の記事をチェックしているとき、リリースノートの「多重（multiplex）接続」ってなんじゃこれ、と思い調べてみたんですが、なかなかに有用なのでちょいとまとめてみました。というか、元ネタはこちらの<a href="http://symkat.com/35/ssh-tips-and-tricks-you-need/">SSH: Tips And Tricks You Need</a>という記事です。</p>
<p>　多重接続というのは、1本のSSHコネクションで複数のセッションを同時に張るという感じのもの。たとえば、OS Xでターミナルを複数開き、それぞれのターミナルウィンドウで1つのサーバーに対しsshコマンドで接続を行った場合、通常はサーバー側では複数のsshdが起動し、それぞれのsshクライアントと通信を行います。いっぽう、多重接続を利用すると1つのsshdが複数のsshと通信する形となり、サーバー側のリソースをより効率的に利用できる、というわけ。</p>
<p>　設定は簡単で、クライアント側の.sshディレクトリに設定ファイルと一時ディレクトリを用意するだけ。</p>
<pre>
$ cd ~/.ssh
$ mkdir connections
$ chmod 700 connections/
$ vim config
</pre>
<p>　~/.ssh/configの内容は下記のとおり。</p>
<pre class="code">
Host *
ControlMaster auto
ControlPath ~/.ssh/connections/%r_%h_%p
</pre>
<p>　あとは、通常通りsshでサーバーに接続するだけ。これだけで、体感できるほど2つめ以降の接続が高速化されます。下記は5つのSSHセッションを張った状態で、6つめのセッションを張ろうとした際の実行速度ベンチマーク。</p>
<pre>
多重化なし：
$ time ssh hylom.******.com uptime
 08:13:53 up 22 days, 10:18,  6 users,  load average: 0.00, 0.00, 0.00

real	0m2.123s
user	0m0.015s
sys	0m0.010s
</pre>
<pre>
多重化あり：
Last login: Tue Aug 24 17:15:34 on ttys006
$ time ssh hylom.******.com uptime
 08:18:53 up 22 days, 10:23,  6 users,  load average: 0.00, 0.00, 0.00

real	0m0.278s
user	0m0.006s
sys	0m0.007s
</pre>
<p>　多重化により、だいたい7.6倍くらい速くなっています。ちなみに、この状態で「ps ux」を実行してみるとこんな感じに。</p>
<pre>
$ ps ux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
hylom    17182  0.2  0.2   8292  1580 ?        S    08:21   0:00 sshd: hylom@pts
hylom    17183  0.0  0.2   2968  1584 pts/0    Ss+  08:21   0:00 -sh
hylom    17188  0.0  0.2   2968  1584 pts/1    Ss+  08:21   0:00 -sh
hylom    17193  0.0  0.2   2968  1584 pts/2    Ss+  08:21   0:00 -sh
hylom    17198  0.0  0.2   2968  1588 pts/3    Ss+  08:21   0:00 -sh
hylom    17203  0.0  0.2   2968  1580 pts/4    Ss+  08:21   0:00 -sh
hylom    17208  1.0  0.3   3484  1856 pts/5    Ss   08:21   0:00 -sh
hylom    17213  0.0  0.1   2432   908 pts/5    R+   08:21   0:00 ps ux
</pre>
<p>　sshdは1つだけで、接続毎にシェルだけが起動されるようになっていることが確認できます。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/08/25/ssh-multiple-conection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gitメモ：ブランチを切ってないのにやばいコードを書いちゃった場</title>
		<link>http://hylom.net/2010/07/30/git-branch-with-stash/</link>
		<comments>http://hylom.net/2010/07/30/git-branch-with-stash/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 00:32:22 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[documents]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1302</guid>
		<description><![CDATA[　gitを使ってコードの管理をしている場合において、実験的なコードを書く場合はソースコードを編集する前にブランチを作成しておくのが基本だ。しかし、ついブランチを作成し忘れたままでコードを変更してしまった、というパターンがある。
　この場合、下記のようにgit stashでいったん変更点を保存した上で直前のcommitに戻し、新たなブランチを作成してそこでgit stash applyを行えばよい。

$ git stash
$ git checkout hogehoge -b
$ git stash apply
$ git add hogehoge foobar
$ git commit

　git stash、便利だ。
]]></description>
			<content:encoded><![CDATA[<p>　gitを使ってコードの管理をしている場合において、実験的なコードを書く場合はソースコードを編集する前にブランチを作成しておくのが基本だ。しかし、ついブランチを作成し忘れたままでコードを変更してしまった、というパターンがある。</p>
<p>　この場合、下記のようにgit stashでいったん変更点を保存した上で直前のcommitに戻し、新たなブランチを作成してそこでgit stash applyを行えばよい。</p>
<pre>
$ git stash
$ git checkout hogehoge -b
$ git stash apply
$ git add hogehoge foobar
$ git commit
</pre>
<p>　git stash、便利だ。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/07/30/git-branch-with-stash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone 4およびiPad向け動画をHandBrakeで作る</title>
		<link>http://hylom.net/2010/07/28/encode-for-iphone4-with-handbrake/</link>
		<comments>http://hylom.net/2010/07/28/encode-for-iphone4-with-handbrake/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 13:34:04 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[documents]]></category>
		<category><![CDATA[codec]]></category>
		<category><![CDATA[handbrake]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1296</guid>
		<description><![CDATA[　先日、私の手元にもiPhone 4が到着。ということで、一部から要望を受けていたHandBrakeのiPhone 4用プロファイルをちょっと調査・研究してみた。
　iPhone 4の動画再生機能については、Webサイトにその仕様が掲載されている（日本語のiPhoneページ）。ただし、日本語ページには一部誤訳というか不明瞭な表記があるたので、英語版iPhoneページを確認するほうが確実。これによると、iPhone 4の動画再生仕様は下記の通り。

H.264：最大720p、30fps。Main Profile（レベル3.1まで、音声はAAC-LCで最大160kbs、48kHz、ステレオ）対応。ファイルフォーマットは.m4v、.mp4、.mov
MPEG-4：最大2.5Mbps、640×480ピクセル、30fps。Simple Profile（音声はAAC-LCでチャンネルあたり最大160kbps、48kHz、ステレオ）対応。ファイルフォーマットは.m4v、.mp4、.mov
MotionJPEG（M-JPEG）：最大35Mbps、1280×720ピクセル、30fps。音声はulawもしくはPCMステレオ。ファイルオーマットは.avi

　iPhone 4の画面サイズは960×640。そのため、縦に持った際は幅640に、横に持った際は幅960に自動的に拡大/縮小されて表示される。また、iPhone 4のドックコネクタ経由での出力では1024×768サイズの出力に対応している模様。
　ちなみに、iPhone 4の動画再生仕様はiPadとまったく同一のようだ。なお、iPadの画面サイズは1024×768である。
　さて、iPhone 4で動画を見る場合、わざわざ容量がかさむMPEG-4を積極的に使う必要はない。そのため、下記ではH.264についてのみ考察を行っていく。
　上記のとおり、iPhone 4はスペック上はHigh Profileには対応していない。しかし、試して見たところHandBrake 0.9.4のプリセットである「High Profile」でエンコードした動画も問題なく再生できてしまった。High ProfileとMain Profileの違いは8&#215;8DCTブロックやカスタム量子化マトリックス（CQM）、Cb/Cr別のQP制御、モノクロ（4:0:0）対応だが、実際8&#215;8DCT以外については、設定の難しさの割に効果は微妙なところではある（そのうえHandBrakeでは設定できない）。
　High Profile非対応という機器でも8&#215;8DCT対応のものはあるので、iPhone 4/iPadもそうなのだろう。HandBrakeでは「High Profile向け」と表示される「Pyramidal B-Frames」については、High ProfileでもOffになっているので気にしないことにする。
　ということで、とりあえずHandBrakeでiPhone 4およびiPad向けのエンコードを行う場合、プリセットのHigh Profile設定を利用すれば問題ないようだ。
　対応する縦横サイズやビットレートに関連する「レベル」については次の機会に。
]]></description>
			<content:encoded><![CDATA[<p>　先日、私の手元にもiPhone 4が到着。ということで、一部から要望を受けていたHandBrakeのiPhone 4用プロファイルをちょっと調査・研究してみた。</p>
<p>　iPhone 4の動画再生機能については、Webサイトにその仕様が掲載されている（<a href="http://www.apple.com/jp/iphone/specs.html">日本語のiPhoneページ</a>）。ただし、日本語ページには一部誤訳というか不明瞭な表記があるたので、<a href="http://www.apple.com/iphone/specs.html">英語版iPhoneページ</a>を確認するほうが確実。これによると、iPhone 4の動画再生仕様は下記の通り。</p>
<ul>
<li>H.264：最大720p、30fps。Main Profile（レベル3.1まで、音声はAAC-LCで最大160kbs、48kHz、ステレオ）対応。ファイルフォーマットは.m4v、.mp4、.mov</li>
<li>MPEG-4：最大2.5Mbps、640×480ピクセル、30fps。Simple Profile（音声はAAC-LCでチャンネルあたり最大160kbps、48kHz、ステレオ）対応。ファイルフォーマットは.m4v、.mp4、.mov</li>
<li>MotionJPEG（M-JPEG）：最大35Mbps、1280×720ピクセル、30fps。音声はulawもしくはPCMステレオ。ファイルオーマットは.avi</li>
</ul>
<p>　iPhone 4の画面サイズは960×640。そのため、縦に持った際は幅640に、横に持った際は幅960に自動的に拡大/縮小されて表示される。また、iPhone 4のドックコネクタ経由での出力では1024×768サイズの出力に対応している模様。</p>
<p>　ちなみに、iPhone 4の動画再生仕様はiPadとまったく同一のようだ。なお、iPadの画面サイズは1024×768である。</p>
<p>　さて、iPhone 4で動画を見る場合、わざわざ容量がかさむMPEG-4を積極的に使う必要はない。そのため、下記ではH.264についてのみ考察を行っていく。</p>
<p>　上記のとおり、iPhone 4はスペック上はHigh Profileには対応していない。しかし、試して見たところHandBrake 0.9.4のプリセットである「High Profile」でエンコードした動画も問題なく再生できてしまった。High ProfileとMain Profileの違いは8&#215;8DCTブロックやカスタム量子化マトリックス（CQM）、Cb/Cr別のQP制御、モノクロ（4:0:0）対応だが、実際8&#215;8DCT以外については、設定の難しさの割に効果は微妙なところではある（そのうえHandBrakeでは設定できない）。</p>
<p>　High Profile非対応という機器でも8&#215;8DCT対応のものはあるので、iPhone 4/iPadもそうなのだろう。HandBrakeでは「High Profile向け」と表示される「Pyramidal B-Frames」については、High ProfileでもOffになっているので気にしないことにする。</p>
<p>　ということで、とりあえずHandBrakeでiPhone 4およびiPad向けのエンコードを行う場合、プリセットのHigh Profile設定を利用すれば問題ないようだ。</p>
<p>　対応する縦横サイズやビットレートに関連する「レベル」については次の機会に。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/07/28/encode-for-iphone4-with-handbrake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LinuxとFreeBSDのベンチマーク比較</title>
		<link>http://hylom.net/2010/07/28/linux-freebsd-benchmark/</link>
		<comments>http://hylom.net/2010/07/28/linux-freebsd-benchmark/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 17:10:30 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1290</guid>
		<description><![CDATA[　やや旧聞となるが、PhoronixがLinuxとFreeBSDのベンチマーク比較を行っている（Debian Linux Benchmarked Against Debian GNU/kFreeBSD &#038; FreeBSD）。比較対象はDebian kFreeBSD 7.3、Debian kFreeBSD 8.0、Debian GNU/Linux（カーネル2.6.32）、FreeBSD 7.3、FreeBSD 8.0。
　「Debian kFreeBSD」はカーネルとしてFreeBSD、ユーザーランドとしてDebianを採用したものだ。Debian GNU/LinuxとDebian kFreeBSDはカーネルだけが異なり、またDebian kFreeBSDとFreeBSDはユーザーランドだけが異なる。これらを比較することで、ユーザーランドもしくはカーネルだけの性能比較が行える（と期待できる）点で興味深いベンチマークである。
　ベンチマーク結果であるが、gzipでの圧縮やGnuPGでの暗号化、MAFFT（分子生物学向けの核酸・アミノ酸アライメント作成ツール）、GraphicsMagickによる画像のリサイズ処理、Himeno BenchmarkについてはDebian kFreeBSDやDebian GNU/Linuxが高パフォーマンス、という結果だった。いっぽう、C-Rayでの3DグラフィックレンダリングについてはFreeBSD 7.3/8.0が高速な傾向が見られている。
　また、Debian GNU/LinuxがFreeBSDやDebian kFreeBSDよりも高速だったのはdCrawによるRAW画像の現像処理、Sudokut（数独演算アプリ）、SQLiteのインサート処理。
　このようにベンチマークごとに結果はばらばらであり、DebianのユーザーランドとFreeBSDのユーザーランドのどちらが高速か、またLinuxカーネルとFreeBSDのカーネルのどちらが高速かは単純には言えないという、なんともモヤモヤとした結論となっている。このベンチマークでは実行マシンとしてThinkPad R52とThinkPad T61を使用しているが、マシンによって結果が違うのも微妙なところだ。
ただし、マルチスレッドによるI/O処理ベンチマークについては、特にランダムWriteについてはLinuxカーネルのほうがパフォーマンスを発揮する傾向があるようだ。
]]></description>
			<content:encoded><![CDATA[<p>　やや旧聞となるが、PhoronixがLinuxとFreeBSDのベンチマーク比較を行っている（<a href="http://www.phoronix.com/scan.php?page=article&#038;item=debian_kfreebsd_h210">Debian Linux Benchmarked Against Debian GNU/kFreeBSD &#038; FreeBSD</a>）。比較対象はDebian kFreeBSD 7.3、Debian kFreeBSD 8.0、Debian GNU/Linux（カーネル2.6.32）、FreeBSD 7.3、FreeBSD 8.0。</p>
<p><P>　「Debian kFreeBSD」はカーネルとしてFreeBSD、ユーザーランドとしてDebianを採用したものだ。Debian GNU/LinuxとDebian kFreeBSDはカーネルだけが異なり、またDebian kFreeBSDとFreeBSDはユーザーランドだけが異なる。これらを比較することで、ユーザーランドもしくはカーネルだけの性能比較が行える（と期待できる）点で興味深いベンチマークである。</p>
<p>　ベンチマーク結果であるが、gzipでの圧縮やGnuPGでの暗号化、MAFFT（分子生物学向けの核酸・アミノ酸アライメント作成ツール）、GraphicsMagickによる画像のリサイズ処理、Himeno BenchmarkについてはDebian kFreeBSDやDebian GNU/Linuxが高パフォーマンス、という結果だった。いっぽう、C-Rayでの3DグラフィックレンダリングについてはFreeBSD 7.3/8.0が高速な傾向が見られている。</p>
<p>　また、Debian GNU/LinuxがFreeBSDやDebian kFreeBSDよりも高速だったのはdCrawによるRAW画像の現像処理、Sudokut（数独演算アプリ）、SQLiteのインサート処理。</p>
<p>　このようにベンチマークごとに結果はばらばらであり、DebianのユーザーランドとFreeBSDのユーザーランドのどちらが高速か、またLinuxカーネルとFreeBSDのカーネルのどちらが高速かは単純には言えないという、なんともモヤモヤとした結論となっている。このベンチマークでは実行マシンとしてThinkPad R52とThinkPad T61を使用しているが、マシンによって結果が違うのも微妙なところだ。</p>
<p>ただし、マルチスレッドによるI/O処理ベンチマークについては、特にランダムWriteについてはLinuxカーネルのほうがパフォーマンスを発揮する傾向があるようだ。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/07/28/linux-freebsd-benchmark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>激安・低サポートのVPS「prgmr.com」を借りる</title>
		<link>http://hylom.net/2010/07/02/start-vps-withprgmr-com%e3%80%8d%e3%82%92%e5%80%9f%e3%82%8a%e3%82%8b/</link>
		<comments>http://hylom.net/2010/07/02/start-vps-withprgmr-com%e3%80%8d%e3%82%92%e5%80%9f%e3%82%8a%e3%82%8b/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 07:49:58 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[vps]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1284</guid>
		<description><![CDATA[　最近、月額490円からの「ServersMan@VPS」が話題だ。ほかにも980円からの「FC2 VPS」など、低価格のVPSはいくつかあるが、それ以前から存在する低価格のVPSサービスとして一部の間で知られていたのが「prgmr.com」である。
　prgmr.comはXenを使用したVPSで価格は$5/月からと低価格なのが魅力の1つだが、安さだけなら国内のVPSサービスと大きくは変わらない。ではなぜprgmr.comが注目されているのかというと、そのアレなたたずまいと、サポートの簡素さによるところが大きい。prgmr.comのトップページにはほかのVPSサービスのような画像による装飾は一切なく、アスキーアートで書かれた「prgmr.com」というバナーと「We don&#8217;t assume you are stupid.」という文言、そして料金やXenベースVPSの特徴が紹介されているのみ。一般人ならとりあえずこのサイトが何であるかも理解できないだろう、という作りである。
　このようにアレゲ感たっぷりのprgmr.comであるが、その一方でかなり自由度は高く、OSはDebian GNU/Linux、Ubuntu 10.04、CentOS 5.5が選択できるほか、AMD64アーキテクチャのXen上で動作するOSなら（自力で）任意のOSがインストールできる（可能性がある）、追加料金なしでグローバルIP付与と、独自のサーバー管理＆Xenが分かる人にとってはかなり魅力的であったりする。
　ということで一部の人には魅力的なこのprgmr.com、ちょくちょく新規受付を開始しては定員に達して終了を繰り返しており、いつでも申し込みできるというわけではないのだが、ウォッチしていたらたまたま申し込み可能になっていたため、$12/月でメモリ512MiB、ディスク12GiB、月間ネットワーク転送量80GiBのプランを申しこんでみた。
Webでの申し込み後、メールでSSH公開鍵を送付。サーバー設定は必要十分
　Webで利用したいプランを選択し、オンラインフォームに必要事項を記入して申し込むと、下記のように利用したいディストリビューションとOpenSSH公開鍵を送信しろ、という旨のメールが来る。

you ordered a xen vps, 512MiB ram, 12GiB Disk 80 GiB transfer Xen VPS,  $12/month username hylom
Before I can set you up, I need to know what distro you would like and an OpenSSH format public key (on a *NIX, run ssh-keygen  and send [...]]]></description>
			<content:encoded><![CDATA[<p>　最近、月額490円からの「<a href="http://dream.jp/vps/">ServersMan@VPS</a>」が話題だ。ほかにも980円からの「<a href="http://fc2-vps.com/">FC2 VPS</a>」など、低価格のVPSはいくつかあるが、それ以前から存在する低価格のVPSサービスとして一部の間で知られていたのが「<a href="http://prgmr.com/">prgmr.com</a>」である。</p>
<p>　prgmr.comはXenを使用したVPSで価格は$5/月からと低価格なのが魅力の1つだが、安さだけなら国内のVPSサービスと大きくは変わらない。ではなぜprgmr.comが注目されているのかというと、そのアレなたたずまいと、サポートの簡素さによるところが大きい。prgmr.comのトップページにはほかのVPSサービスのような画像による装飾は一切なく、アスキーアートで書かれた「prgmr.com」というバナーと「We don&#8217;t assume you are stupid.」という文言、そして料金やXenベースVPSの特徴が紹介されているのみ。一般人ならとりあえずこのサイトが何であるかも理解できないだろう、という作りである。</p>
<p>　このようにアレゲ感たっぷりのprgmr.comであるが、その一方でかなり自由度は高く、OSはDebian GNU/Linux、Ubuntu 10.04、CentOS 5.5が選択できるほか、AMD64アーキテクチャのXen上で動作するOSなら（自力で）任意のOSがインストールできる（可能性がある）、追加料金なしでグローバルIP付与と、独自のサーバー管理＆Xenが分かる人にとってはかなり魅力的であったりする。</p>
<p>　ということで一部の人には魅力的なこのprgmr.com、ちょくちょく新規受付を開始しては定員に達して終了を繰り返しており、いつでも申し込みできるというわけではないのだが、ウォッチしていたらたまたま申し込み可能になっていたため、$12/月でメモリ512MiB、ディスク12GiB、月間ネットワーク転送量80GiBのプランを申しこんでみた。</p>
<h4>Webでの申し込み後、メールでSSH公開鍵を送付。サーバー設定は必要十分</h4>
<p>　Webで利用したいプランを選択し、オンラインフォームに必要事項を記入して申し込むと、下記のように利用したいディストリビューションとOpenSSH公開鍵を送信しろ、という旨のメールが来る。</p>
<blockquote>
<p>you ordered a xen vps, 512MiB ram, 12GiB Disk 80 GiB transfer Xen VPS,  $12/month username hylom</p>
<p>Before I can set you up, I need to know what distro you would like and an OpenSSH format public key (on a *NIX, run ssh-keygen  and send me either the id_dsa.pub or id_rsa.pub file in an attachment)</p>
</blockquote>
<p>　あとはこのメールの返信として公開鍵を添付し、Debian GNU/Linuxを使いたいという旨を伝えるだけだ。</p>
<blockquote>
<p>Hi,</p>
<p>I want to use Debian GNU/Linux, and here&#8217;s my SSH public key.</p>
<p>Please check it.
</p></blockquote>
<p>　設定が完了すると、その旨がメールで連絡される。また、しばらくすると金払ってねメールがやってくる模様。料金の支払いはPayPal。</p>
<p>　続く。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/07/02/start-vps-withprgmr-com%e3%80%8d%e3%82%92%e5%80%9f%e3%82%8a%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Small Basic 0.9リリース</title>
		<link>http://hylom.net/2010/06/14/small-basic-09-release/</link>
		<comments>http://hylom.net/2010/06/14/small-basic-09-release/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 04:20:56 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1282</guid>
		<description><![CDATA[　Microsoftがプログラミング学習用としてリリースしているBASICプログラミング環境「Small Basic」の0.9が6月11日にリリースされた。
　Small Basicブログによると、Small Basicコンパイラのパフォーマンス強化や新規ライブラリの追加などが行われているとのこと。ループが多いプログラムで、4倍ものパフォーマンス向上を達成できた例もあるそうだ。
　追加されたライブラリでは、MML的記法で音楽を再生できる「PlayMusic」機能が面白そうだ。教育用とはいえ、Flickr連携や作成したプログラムをSilverlightを用いてWebブラウザ上で実行する機能などもあり、ちょっとしたユーティリティなどを作成するのにも便利かもしれない。
]]></description>
			<content:encoded><![CDATA[<p>　Microsoftがプログラミング学習用としてリリースしているBASICプログラミング環境「Small Basic」の0.9が6月11日にリリースされた。</p>
<p>　<a href="http://blogs.msdn.com/b/smallbasic/archive/2010/06/11/small-basic-v0-9-is-here.aspx">Small Basicブログ</a>によると、Small Basicコンパイラのパフォーマンス強化や新規ライブラリの追加などが行われているとのこと。ループが多いプログラムで、4倍ものパフォーマンス向上を達成できた例もあるそうだ。</p>
<p>　追加されたライブラリでは、MML的記法で音楽を再生できる「PlayMusic」機能が面白そうだ。教育用とはいえ、Flickr連携や作成したプログラムをSilverlightを用いてWebブラウザ上で実行する機能などもあり、ちょっとしたユーティリティなどを作成するのにも便利かもしれない。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/06/14/small-basic-09-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>オープンソースなデバッガのニューカマー「lldb」、LLVMのサブプロジェクトとして登場</title>
		<link>http://hylom.net/2010/06/10/new_lldb_debugger/</link>
		<comments>http://hylom.net/2010/06/10/new_lldb_debugger/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 11:57:19 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>
		<category><![CDATA[debug]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1280</guid>
		<description><![CDATA[　ここ数年注目されているコンパイラ環境「LLVM」が、サブプロジェクトとして「LLDB」なるデバッガを開発するよとアナウンスしている（LLVM Project Blog）。
　LLVMは「コンパイラインフラストラクチャ」という形で開発が進められているのだが、このLLDBは現代的な「デバッガインフラストラクチャ」とのことで、モジュラー化構造や再利用しやすいライブラリが特徴らしい。LLDBはLLVMの技術やAPI、パーサー、コードジェネレータ、JITコンパイラなどを利用して構築されているとのこと。
　現在は開発中の段階で、Mac OS Xでのコマンドラインでのデバッグのみに対応しているとのことだが、scriptableだったり、マルチスレッド対応など面白い話もある。さらに現状ではGDBよりも高速だそうで、特にC++プログラマにとっては使いやすいものになっているらしい。
]]></description>
			<content:encoded><![CDATA[<p>　ここ数年注目されているコンパイラ環境「LLVM」が、サブプロジェクトとして「LLDB」なるデバッガを開発するよとアナウンスしている（<a href="http://blog.llvm.org/2010/06/new-lldb-debugger.html">LLVM Project Blog</a>）。</p>
<p>　LLVMは「コンパイラインフラストラクチャ」という形で開発が進められているのだが、このLLDBは現代的な「デバッガインフラストラクチャ」とのことで、モジュラー化構造や再利用しやすいライブラリが特徴らしい。LLDBはLLVMの技術やAPI、パーサー、コードジェネレータ、JITコンパイラなどを利用して構築されているとのこと。</p>
<p>　現在は開発中の段階で、Mac OS Xでのコマンドラインでのデバッグのみに対応しているとのことだが、scriptableだったり、マルチスレッド対応など面白い話もある。さらに現状ではGDBよりも高速だそうで、特にC++プログラマにとっては使いやすいものになっているらしい。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/06/10/new_lldb_debugger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>コンテンツのロードを高速化するHTML5の「link prefetching」機能</title>
		<link>http://hylom.net/2010/06/03/html5_link_prefetch/</link>
		<comments>http://hylom.net/2010/06/03/html5_link_prefetch/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 03:42:08 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1272</guid>
		<description><![CDATA[　keyboardyによると、HTML5にはlink prefetching機能があり、指定したコンテンツをあらかじめfetchしておく機能があるそうだ。
　fetchするコンテンツはLINKタグで指定する。たとえば、次のようなLINK要素をHTML内に記述しておくと、ロード時に「page2.html」がfetchされる。

&#60;link rel="next" href="page2.html"&#62;

　また、次のように明示的にprefetchを指定することもできる。

&#60;link rel="prefetch" href="/img/img.jpg"&#62;

　この機能はすでにFirefoxでは実装済みで、OperaやChrome、Safariでもすぐにサポートされるのでは、とのこと。Internet Explorerでは2020年代まで利用できないかも;-) だそうだ。
　ちなみにMozillaのlink prefetchingに関するドキュメントによると、HTTPヘッダーでも次のようにしてprefetchするコンテンツを指定できる。

Link: &#60;/images/big.jpeg&#62;; rel=prefetch

　さらに、METAタグでも指定できる。

&#60;meta http-equiv="Link" content="&#60;/images/big.jpeg&#62;; rel=prefetch"&#62;

　また、 Firefoxの場合、http://で始まるURLのみに対応し、https://はセキュリティ関連の理由のためprefetchされない。また、FTPなどもprefetch対象外。prefetchはブラウザがidle状態で、たとえばコンテンツのローディングやダウンロードが行われている間は行われないそうだ。あとはユーザー設定でFirefoxのprefetchを無効にできるとか、prefetchリクエストは「X-moz: prefetch」ヘッダー付きで送信されるとか色々あるが、その辺は上記のドキュメントを参照。
]]></description>
			<content:encoded><![CDATA[<p>　<a href="http://keyboardy.com/programming/html5-link-prefetching/">keyboardy</a>によると、HTML5にはlink prefetching機能があり、指定したコンテンツをあらかじめfetchしておく機能があるそうだ。</p>
<p>　fetchするコンテンツはLINKタグで指定する。たとえば、次のようなLINK要素をHTML内に記述しておくと、ロード時に「page2.html」がfetchされる。</p>
<pre>
&lt;link rel="next" href="page2.html"&gt;
</pre>
<p>　また、次のように明示的にprefetchを指定することもできる。</p>
<pre>
&lt;link rel="prefetch" href="/img/img.jpg"&gt;
</pre>
<p>　この機能はすでにFirefoxでは実装済みで、OperaやChrome、Safariでもすぐにサポートされるのでは、とのこと。Internet Explorerでは2020年代まで利用できないかも;-) だそうだ。</p>
<p>　ちなみに<a href="https://developer.mozilla.org/en/link_prefetching_faq">Mozillaのlink prefetchingに関するドキュメント</a>によると、HTTPヘッダーでも次のようにしてprefetchするコンテンツを指定できる。</p>
<pre>
Link: &lt;/images/big.jpeg&gt;; rel=prefetch
</pre>
<p>　さらに、METAタグでも指定できる。</p>
<pre>
&lt;meta http-equiv="Link" content="&lt;/images/big.jpeg&gt;; rel=prefetch"&gt;
</pre>
<p>　また、 Firefoxの場合、http://で始まるURLのみに対応し、https://はセキュリティ関連の理由のためprefetchされない。また、FTPなどもprefetch対象外。prefetchはブラウザがidle状態で、たとえばコンテンツのローディングやダウンロードが行われている間は行われないそうだ。あとはユーザー設定でFirefoxのprefetchを無効にできるとか、prefetchリクエストは「X-moz: prefetch」ヘッダー付きで送信されるとか色々あるが、その辺は上記のドキュメントを参照。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/06/03/html5_link_prefetch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pythonで被はてなブックマーク数を取得する</title>
		<link>http://hylom.net/2010/05/31/python_hatebu_withxmlrpclib/</link>
		<comments>http://hylom.net/2010/05/31/python_hatebu_withxmlrpclib/#comments</comments>
		<pubDate>Mon, 31 May 2010 10:43:54 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[xmlrpclib]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1270</guid>
		<description><![CDATA[　Pythonのxmlrpclibモジュールで、指定したURLの被はてなブックマーク数を取得する例。簡単ですね。
　server.bookmark.getCount()はURLをキー、被はてブ数の値とするdictionaryの形で返してくれるので、返ってきたデータの参照も楽勝です。URLの一覧を引数の形で与えなければならないのがなんか引っかかりますが……。

#!/usr/bin/env python

import xmlrpclib

def main():
    uri = "http://b.hatena.ne.jp/xmlrpc"
    server = xmlrpclib.ServerProxy(uri)
    urls = ("http://sourceforge.jp/magazine/10/04/26/0244255",
             "http://sourceforge.jp/magazine/10/04/27/0326224",
             "http://sourceforge.jp/magazine/10/04/30/0243232")

    t = server.bookmark.getCount(*urls)
  [...]]]></description>
			<content:encoded><![CDATA[<p>　Pythonのxmlrpclibモジュールで、指定したURLの被はてなブックマーク数を取得する例。簡単ですね。</p>
<p>　server.bookmark.getCount()はURLをキー、被はてブ数の値とするdictionaryの形で返してくれるので、返ってきたデータの参照も楽勝です。URLの一覧を引数の形で与えなければならないのがなんか引っかかりますが……。</p>
<pre>
#!/usr/bin/env python

import xmlrpclib

def main():
    uri = "http://b.hatena.ne.jp/xmlrpc"
    server = xmlrpclib.ServerProxy(uri)
    urls = ("http://sourceforge.jp/magazine/10/04/26/0244255",
             "http://sourceforge.jp/magazine/10/04/27/0326224",
             "http://sourceforge.jp/magazine/10/04/30/0243232")

    t = server.bookmark.getCount(*urls)
    for item in t:
        print item, t[item]

if __name__ == "__main__":
    main()
</pre>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/05/31/python_hatebu_withxmlrpclib/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pythonのwith構文と__enter__、__exit__</title>
		<link>http://hylom.net/2010/05/18/python_with_statemen/</link>
		<comments>http://hylom.net/2010/05/18/python_with_statemen/#comments</comments>
		<pubDate>Tue, 18 May 2010 11:27:36 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1264</guid>
		<description><![CDATA[　Pythonのwith構文がいまいち掴めなかったので、ざっとまとめてみた（いまさらながら）。ドキュメントはPython リファレンスマニュアルの7.5 with 文にある。
　withを使ったコード例は、下記のような感じ。

c = ClassHogeHoge()
with c:
    c.foobar()

　上記のコードは、下記と等価となる。

c = ClassHogeHoge()
c.__enter__()
c.foobar()
c.__exit__()

　つまり、withに続くインデントブロックを実行する前に指定したオブジェクトの「__enter__()」メソッドを呼び出し、実行後に「__exit__()」メソッドが暗に呼び出される、という仕組み。
　__enter__()と__exit__()の定義は、Python リファレンスマニュアルの3.4.9 with文とコンテキストマネージャにある。__enter__()の引数はselfのみだが、__exit__()はself、exc_type、exc_value、tracebackの4つの引数をとる。withに続くインデントブロックが正常に実行された（つまり、例外が送出されなかった）場合、（self以外の）引数にはNoneが与えられる。なにか例外が発生した場合、その例外に関する情報が与えられるらしい。
　また、「with hogehoge as foo:」のような形でwith文を利用する場合、__enter__()の戻り値がfooに代入される。__exit__()の戻り値は例外処理の伝搬制御に使われ、Falseの場合例外が発生た場合でも例外を伝搬させず、Trueを返すと例外が伝搬されるとのこと。
　下記、使用例。

class CacheDB(object):
    DB_FILE = "database/db_dat"

    def __init__(self):
        self.con = None
        self.cur = None

    def __enter__(self):
 [...]]]></description>
			<content:encoded><![CDATA[<p>　Pythonのwith構文がいまいち掴めなかったので、ざっとまとめてみた（いまさらながら）。ドキュメントは<a href="http://www.python.jp/doc/2.5/ref/with.html">Python リファレンスマニュアルの7.5 with 文</a>にある。</p>
<p>　withを使ったコード例は、下記のような感じ。</p>
<pre>
c = ClassHogeHoge()
with c:
    c.foobar()
</pre>
<p>　上記のコードは、下記と等価となる。</p>
<pre>
c = ClassHogeHoge()
c.__enter__()
c.foobar()
c.__exit__()
</pre>
<p>　つまり、withに続くインデントブロックを実行する前に指定したオブジェクトの「__enter__()」メソッドを呼び出し、実行後に「__exit__()」メソッドが暗に呼び出される、という仕組み。</p>
<p>　__enter__()と__exit__()の定義は、<a href="http://www.python.jp/doc/2.5/ref/context-managers.html">Python リファレンスマニュアルの3.4.9 with文とコンテキストマネージャ</a>にある。__enter__()の引数はselfのみだが、__exit__()はself、exc_type、exc_value、tracebackの4つの引数をとる。withに続くインデントブロックが正常に実行された（つまり、例外が送出されなかった）場合、（self以外の）引数にはNoneが与えられる。なにか例外が発生した場合、その例外に関する情報が与えられるらしい。</p>
<p>　また、「with hogehoge as foo:」のような形でwith文を利用する場合、__enter__()の戻り値がfooに代入される。__exit__()の戻り値は例外処理の伝搬制御に使われ、Falseの場合例外が発生た場合でも例外を伝搬させず、Trueを返すと例外が伝搬されるとのこと。</p>
<p>　下記、使用例。</p>
<pre>
class CacheDB(object):
    DB_FILE = "database/db_dat"

    def __init__(self):
        self.con = None
        self.cur = None

    def __enter__(self):
        self.con = sqlite3.connect(self.DB_FILE)
        self.cur = self.con.cursor()

    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type:
            self.con = None
            self.cur = None
            return False
        self.con.commit()
        self.cur.close()
        self.con.close()
        self.con = None
        self.cur = None
        return True

    def add(self, foo, bar, hoge):
        try:
            self.cur.execute("""insert into data ( foo, bar, hoge )
                           values (?, ?, ?);""", (foo, bar, hoge))

def main():
    usage = "%s logfile" % sys.argv[0]
    db = CacheDB()
    try:
        fname = args[0]
    except IndexError:
        sys.exit(usage)

    f = open(fname, "r")
    with db:
        for l in f:
            term = l.strip().decode("utf-8").rsplit("\t", 3)
            db.add(foo=term[0],
                   bar=term[1],
                   hoge=term[2])

if __name__ == '__main__':
    main()
</pre>
<p>　タブ区切りのデータファイルを1行ずつ読んでデータベースに突込む、という処理。withを使うことで、データベースアクセスの準備→データ挿入→コミットという流れをきれいに実装できました。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/05/18/python_with_statemen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
