コンテンツ
あまり知られてない(ような気がする)sshの多重接続
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, 6 users, load average: 0.00, 0.00, 0.00 real 0m0.278s user 0m0.006s sys 0m0.007s
多重化により、だいたい7.6倍くらい速くなっています。ちなみに、この状態で「ps ux」を実行してみるとこんな感じに。
$ 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
sshdは1つだけで、接続毎にシェルだけが起動されるようになっていることが確認できます。
激安・低サポートのVPS「prgmr.com」を借りる
最近、月額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’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 me either the id_dsa.pub or id_rsa.pub file in an attachment)
あとはこのメールの返信として公開鍵を添付し、Debian GNU/Linuxを使いたいという旨を伝えるだけだ。
Hi,
I want to use Debian GNU/Linux, and here’s my SSH public key.
Please check it.
設定が完了すると、その旨がメールで連絡される。また、しばらくすると金払ってねメールがやってくる模様。料金の支払いはPayPal。
続く。
オープンソースなデバッガのニューカマー「lldb」、LLVMのサブプロジェクトとして登場
ここ数年注目されているコンパイラ環境「LLVM」が、サブプロジェクトとして「LLDB」なるデバッガを開発するよとアナウンスしている(LLVM Project Blog)。
LLVMは「コンパイラインフラストラクチャ」という形で開発が進められているのだが、このLLDBは現代的な「デバッガインフラストラクチャ」とのことで、モジュラー化構造や再利用しやすいライブラリが特徴らしい。LLDBはLLVMの技術やAPI、パーサー、コードジェネレータ、JITコンパイラなどを利用して構築されているとのこと。
現在は開発中の段階で、Mac OS Xでのコマンドラインでのデバッグのみに対応しているとのことだが、scriptableだったり、マルチスレッド対応など面白い話もある。さらに現状ではGDBよりも高速だそうで、特にC++プログラマにとっては使いやすいものになっているらしい。
コンテンツのロードを高速化するHTML5の「link prefetching」機能
keyboardyによると、HTML5にはlink prefetching機能があり、指定したコンテンツをあらかじめfetchしておく機能があるそうだ。
fetchするコンテンツはLINKタグで指定する。たとえば、次のようなLINK要素をHTML内に記述しておくと、ロード時に「page2.html」がfetchされる。
<link rel="next" href="page2.html">
また、次のように明示的にprefetchを指定することもできる。
<link rel="prefetch" href="/img/img.jpg">
この機能はすでにFirefoxでは実装済みで、OperaやChrome、Safariでもすぐにサポートされるのでは、とのこと。Internet Explorerでは2020年代まで利用できないかも;-) だそうだ。
ちなみにMozillaのlink prefetchingに関するドキュメントによると、HTTPヘッダーでも次のようにしてprefetchするコンテンツを指定できる。
Link: </images/big.jpeg>; rel=prefetch
さらに、METAタグでも指定できる。
<meta http-equiv="Link" content="</images/big.jpeg>; rel=prefetch">
また、 Firefoxの場合、http://で始まるURLのみに対応し、https://はセキュリティ関連の理由のためprefetchされない。また、FTPなどもprefetch対象外。prefetchはブラウザがidle状態で、たとえばコンテンツのローディングやダウンロードが行われている間は行われないそうだ。あとはユーザー設定でFirefoxのprefetchを無効にできるとか、prefetchリクエストは「X-moz: prefetch」ヘッダー付きで送信されるとか色々あるが、その辺は上記のドキュメントを参照。
Mako Templaters for Pythonメモ1:Makoってなに?
最近Pythonのテンプレートエンジン「Mako」を触ってるんだけど、日本語の情報が全然ないのでまとめてみる。
