2010-08-21

Metalink って何?

きっかけは、ある数学ソフトウェアだった。ダウンロードしようとリンクをクリックすると、dmg ファイルではなく xxxx.dmg.metalink というファイルが落ちてきた。中身は XML だった。ダウンロードページの注意書きを読むと、Metalink 方式で落とせと書いてある(あとでわかったが、通常の HTTP ダウンロードのリンクもあった)。

ググると、Metalink 方式でダウンロードするには、専用クライアントが必要だとわかった。Mac OS X で動くもののうち、手軽に利用できそうなのは aria2 というもの。port でインストールできる。早速、port install を実行し、その間に Metalink について、もう少し調べてみた。

(Metalinkを活用した手間知らずのダウンロード - SourceForge.JP Magazine) Metalinkとはオープン標準の1つだが、その目的はダウンロード作業を簡単化、高速化、高信頼化させることにあり、やや大げさに言えば、個々のユーザが確保した通信帯域を最後の1ビットまで利用し尽くすことを目指している。

URL 1 つでダウンロード対象の情報を表現する HTTP 等の方式と異なり、各種情報をmetalink ファイルとしてまとめてクライアントに提供する。ここで各種情報とは、複数のダウンロード方式(HTTP や BitTorrent)や接続先(ミラー)、ファイルに対するチェックサム(md5 や sha1)や、部分ごとのチェックサムなどのことだ。

Wikipedia:en によれば、Metalink は 2005 年に Linux ディストリビューションの ISO イメージをダウンロードに供するために公開された(Metalink 3.0)、とある。さらに、2008 年には IETF に提出されて、2010 年に Metalink 4.0 として RFC になった(→ RFC 5854)、と。ああ、つまりはインターネット標準なんだね。ちなみに、3.0 と 4.0 の間にはファイルとしての互換性はないらしい。

もともと、巨大かつ人気の高いファイルのダウンロードを円滑にするために考えられた方式で、ちょっと特殊な用途のものだと言える。それでも RFC の Standard Track になっているんだから、そのうちブラウザでも標準でサポートするようになるかもね。

関連リンク

twitter より (2010-08-20)

Powered by twtr2src.

2010-08-20

SSH でリモートホストに別のユーザ名で接続する

SSH でリモートホストに接続するときには、リモートホスト上のユーザ名として現在のホストでのログイン名が使われる。リモートホスト上のユーザ名が異なる場合は、ssh コマンドで指定する接続先としてユーザ名を明示的に指定する。以下のような形式で。

[macbook] mnbi% ssh imnb@imac

毎回、ユーザ名を指定するのが面倒だと感じるなら、.ssh/config ファイルに以下のような記述を追加しておけば良い。

Host imac
 User imnb

ユーザ名はなるべく同じものを使う方が、いろいろと面倒がなくて良いね。

参考文献

.ssh/config の項目については、以下の書籍を参照した。「5.2 SSH クライアントの設定 (ssh_config)」(p.153 〜) が参照部分。

関連リンク

関連記事

twitter より (2010-08-19)

Powered by twtr2src.

2010-08-19

twitter より (2010-08-18)

Powered by twtr2src.

2^64 (2 の 64 乗) って、どれぐらい? (続き)

概算で良ければ、こんな方法で桁数を知ることもできる。210 (= 1024) ≒ 103 (= 1000) だという事実を使う。

264 = 24 * 260
= 16 * (210)6
≒ 16 * (103)6
= 16 * 1018
= (6 + 10) * 1018
= 6 * 1018 + 10 * 1018
= 6 * 1018 + 1019

前半は 19 桁の数、後半は 20 桁の数(それも 1 の後に 0 が 19 個続くもの)なので、足しても 20 桁になる。なので、264 の方も、(少なくとも) 20 桁だとわかる。これなら、対数のことなんて思い出さなくても計算できる。

この程度で十分、実用になることもある。20 桁で最小の数は 1019だ。なら、1 から始めてここまで数えるのに必要な時間は何年か?

10000000000000000000 seconds
-> 2777777777777777 hours
-> 115740740740740 days
-> 317097919837 years

317,097,919,837 年。3100 億年以上。前回、正確な 264 の値で計算した 5800 億年以上にくらべたらかなり差があるけれど、どちらにせよ、宇宙が終わるぐらいの時間が必要だってことはわかる。1 億人で分担して並列に数えても、3100 年、10 億人で 310 年、...。これだけのスケール感がわかれば実用的には十分だ。

ところで、IT の世界では、これよりもっと大きな数を割り当てているものがある。それは IPv6 のアドレス。アドレスを 128 ビットで表すから、実に 2128 個もあることになる。

じゃ、2128 って、どれぐらい?

関連リンク

  • IPv6 (Wikipedia:ja)

関連記事

2010-08-18

2^64 (2 の 64 乗) って、どれぐらい?

現行の Mac に搭載されている OS、Snow Leopard は 64 ビット OS だと言われる。この 64 ビットって、いったいどれぐらいの数なんだろう?

64 ビットの「ビット」は 2 進数で 1 桁のこと。普段、わたしたちが日常生活で使う 10 進数では 1 桁で 0 〜 9 までの整数を表現できる。2 桁なら 99 まで、3 桁なら 999 まで、...。一般に、10 進 n 桁で 10n - 1 までの整数を表現できる。同様に、2 進 n 桁では 2n -1 までだ。つまり、64 ビットなら 264 - 1 が最大の数となる(符号なしの場合)。

では、この 264 (あるいは 264 - 1) って、いったいどれぐらいの大きさなんだろう?

(プログラマじゃない)普通の人々は 2 進数を扱うことがほとんどないから、2n と言われてもピンとこないだろう。いや、普通じゃない人(プログラマ)だって、28 や 216 ならともかく、264 の大きさは実感できない。わたしたちが数の大きさを実感するには、扱い慣れた 10 進数でなければならない。10 進数なら、桁を千、万、億、それに兆(英語ではちょっとスケールがずれるけど、thousand、million、billion、trillion といったところか)と読んでいくことで(それなりに)実感できる。

では、264 が 10 進数で何桁になるかを求めてみよう。それには「対数」を使う(底を10とする常用対数)。基本となるのは、(10進数で) n 桁の数 A に対して以下が成り立つこと。

10n-1 ≦ A < 10n ⇔ n-1 ≦ log10 A < n ...... (1)

つまり log10A が計算できれば、その桁数がわかる。今の場合、log10(264) を求めれば良いことになる。

さあ、受験数学を思い出しつつ、計算してみよう。

対数: 底の変換

計算に必要なのはこの公式だ。

logax = logbx / logba

この特別な場合として、b -> x (ただし x ≠ 1)とすれば、以下の公式も導ける。

logax = 1 / logxa

なぜ、底の変換を行うか、と言うと、264 に対して底が 2 の対数を求めることは簡単だからだ。対数の定義から、log2(264) というのは、2 を何乗すれば 264 になるか、という数のことだ。つまり、これは 64。一方で、log102 なら対数表に載っている。

これで材料がそろった。

log10(264) を計算する

底の変換公式と log102 ≒ 0.30103 (これは常用対数の対数表から読み取る) から、log10(264) の値を計算すると、

log10(264) = log2(264) / log210
= log2(264) * log102
≒ 64 * 0.30103
= 19.26592

この結果と式 (1) をあわせると、264 が(10進数で表すと) 20 桁の数になることがわかる。それより 1 少ないだけの 264 - 1 も同じく 20 桁の数だ。

ここまでは、紙と鉛筆があれば計算できる(log102 の値さえ覚えていれば)。けれど、20 桁の数とわかったところで、まだその大きさはピンとこない。

twitter より (2010-08-17)

  • 04:03  Ruby で数値を 3 桁づつカンマで区切るにはどうすれば良いか? 数行のプログラムを書けばできるんだけど、もっと良い方法はないものか、とググってみた。そのものずばりの方法が載ってた。方法3に感動した。正規表現、すげえよ。→ http://bit.ly/cL4Rw3
  • 20:36  Magic Trackpad。3本指のスワイプ(指3本をつけて左右に動かす)で Safari の「前へ戻る」「次へ進む」のジェスチャになる。慣れると便利。
  • 23:32  「インターフェイスの街角」(UNIX MAGAZINE COLLECTION として単行本化されたもの) を読んでいる。やっぱり、Q-Pocket は良いよね。→ http://bit.ly/cmJCFj
  • 23:38  書くなら Emacs (っぽい何か; Cocoa アプリならたいていそうなってる)、見るならブラウザ(Safari とか)。データの形式はやはり HTML だろう。ブラウザで見ることを考えると Plain Text はちょっと魅力に欠ける。リンクもできないし。
  • 23:39  標準の道具を組み合わせて、(OSX 上に) Q-Pocket っぽいシステムを実現できないものか。
  • 23:41  そうそう、検索に関しては (OSX なら) Spotlight が届く。
Powered by twtr2src.

2010-08-17

Github に SSH 公開鍵を登録する

Github のリポジトリにアクセスするためには、あらかじめこちらの SSH 公開鍵を登録しておかなければならない。公開鍵は ssh-keygen コマンドで作れば良い。ウチの環境では、LAN 内の他の Mac へのリモート接続等に公開鍵を使っているため、今回 Github へ登録するものは、それとは別に作ることにした。そのための手順は以下のようになる。

  1. 公開鍵生成時に鍵ファイルの名前を指定する。
  2. Github への SSH 接続では標準とは異なる鍵ファイルを使うように設定する。
SSH 公開鍵の生成

以下が実際の公開鍵生成の実行結果。参考にしたのは help.github にある「Generating SSH keys (OSX)」。また、鍵のファイル名を変更する方法については「Macにgitをインストールしてそのままgithubにも登録」にならった。

[imac] mnbi% ssh-keygen -C "mnbi@foo.bar.baz"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mnbi/.ssh/id_rsa): github_id_rsa
[...snip...]
SSH の設定

Troubleshooting SSH issues」の "SSH config" にしたがい、~/.ssh/config に以下の記述を追加する。

Host github.com
 User git
 Hostname github.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/github_id_rsa
Github への接続テスト

生成した公開鍵(↑の実行例では github_id_rsa.pub)の内容を Github に登録した後、「Generating SSH keys (OSX)」にしたがい、接続テストを行う。以下はその実行結果。

[imac] mnbi% ssh git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Identity added: /Users/mnbi/.ssh/github_id_rsa (/Users/mnbi/.ssh/github_id_rsa)
PTY allocation request failed on channel 0
ERROR: Hi mnbi! You've successfully authenticated, but GitHub does not provide shell access
           Connection to github.com closed.

Github はシェルアクセスを認めていないため接続は切られる。肝心なのは「You've successfully authenticated」の部分。これにより、認証は成功したことがわかる。

追記@2010-11-17

実際のプロジェクトの登録については、「既存のプロジェクトを github に公開する」を参照。

関連リンク

関連記事

twitter より (2010-08-16)

Powered by twtr2src.

2010-08-16

Gist を使って記事にコードを埋め込む (続き)

今日気付いたことだが、前回書いた Gist を利用する方法には少し問題があった。

この方法ではコードを表示するために script 要素を使う。以下のようなタグとして記事の HTML 中に埋まることになる。

(Gist を使ったコードの埋め込み用 script タグ)
<script src="http://gist.github.com/524290.js?file=embed_code.rb"></script>

Safari などのブラウザで見る限り、これで問題はないが、RSS リーダーでは問題になる。実際、Google Reader で前回の記事を見ていて、Gist からの埋め込みコードが表示されないことに気付いたのだ。Safari で RSS フィードを表示させた場合や JavaScript を無効にした状態も同様。試してはいないが、JavaScript をサポートしないブラウザも同じはず。

外部サービスを利用する以上、そして JavaScript を使う以上、これは避けられない問題だ。便利さを求めると、何かを犠牲にしなければならない。

とはいえ、何も表示されないのはイヤな感じなので、せめて Gist の該当コードのページへのリンクを noscript を使って表示させてみることを考えた。試してみたところ、Google Reader では noscript 部分が表示された。iPhone アプリの「MobileRSS Free」でも OK。Safari で JavaScript を無効にした場合も noscript 部分の内容が表示される。ただし、Safari に RSS フィードを表示させた場合はダメだった。noscript が無視される。RSS リーダーによっては noscript を無視するものもあるってことだ。

以下が noscript を付けたサンプル。JavaScript が有効なブラウザなら Gist からのコードの表示が、無効あるいはサポートなしのブラウザなら Gist のページへのリンクが見えるはず。

具体的には、以下のように記述してある。

(Gist を使ったコードの埋め込み用 script タグ、noscript 付き)
<script src="http://gist.github.com/524290.js?file=embed_code.rb"></script>
<noscript><div>→ <a href="http://gist.github.com/524290">embed_code.rb</a></div></noscript>

noscript 部分を手で書くことになり少し手間が増えるが、それでもコードそのものを整形して埋め込むよりは簡単だ。

関連リンク

関連記事

twitter より (2010-08-15)

  • 16:49  Snow Leopard カーネルの 64 bit モードでの起動、最近じゃぜんぜん話題にならなくなった。先日届いた iMac (Mid 2010; Quad-Core Core i5) が 64 bit モードで起動することを確認した。もちろん差は体感できない。
  • 17:20  「真逆」って言葉、辞書に載ってないね。「まぎゃく」って読む、普通に皆が使う言葉だと思ってたよ。「真逆 読み」でググってみると、どうやらここ数年でわいて出た言葉らしい。言葉って生き物なんだ、と改めて感じるわ。
  • 21:48  Google が出した本、"The Datacenter as a Computer" PDF で読める。先日、出た「Googleクラウドの核心」はこれの翻訳のようだ。 → http://bit.ly/5gkHY9
Powered by twtr2src.

2010-08-15

Gist を使って記事にコードを埋め込む

前回、コードをブログに載せる際、Github のようなリポジトリに登録してしまうのが手っ取り早いんだろう、と書いた。けど、ちょっと大袈裟な感じがする、とも。ググってみたところ、ちょうどぴったりのサービスを見つけた。Github が提供する Gist だ。

試しに、前回の記事に載せたコードを登録してみた。それを Gist 経由で貼り付けると、こうなる(↓)。

行番号が付かないのがちょっと残念だが、名前の通ったプログラミング言語なら文法に合わせた色付けもしてくれる。コード自体(「view raw」リンク)を取ることもできるから、ブラウザからコピーしてフィルタにかける手間もいらない。

サービスの利用に必要なのは Github へのユーザ登録。他は何も必要ない。

Gist の使い方はとても簡単。Gist のページを開いたら(→)、テキストエリアにコードをペーストし、ファイル名を入力(「name this file...」)、言語を選択したら、右下の「Create Public Gist」ボタンを押す。

登録が完了したら個別のページが開くので、コードリストの右上にある「embed」というリンクをクリックする。HTML に埋め込むための script 要素が表示されるので、コピーしてブログの記事にペーストする。

外部スクリプトだから、表示する時に一瞬引っかかるけれど、そこはしかたがない。見た目(フォントとか)をこちらで制御できないのが気になるところか。

今どきは、探せば大抵のことには、サービスが見つかるもんだね。

関連リンク

関連記事

twitter より (2010-08-14)

Powered by twtr2src.