2007/02/19(月)物事を理解する法

今日はちょっと古い記事のサルベージです。

理解と暗記の違い

受験とかの試験社会(記憶力主義)の弊害なんだけども、理解することと丸暗記することを区別できていない、その違いがわからない人がとても多い。受験の点数だけを考えれば、概念を理解するよりも記憶力さえある程度長けていれば意味も理解せずに暗記してしまった方が楽だし何より効率がいい。でもそれは社会(や大学以上)では通用しないどころか、理解の本質を知らないことで損をすることだらけだったりします。

いわゆる「使えない奴」ということです。

使える使えないというのは、現実の問題に対して解決策を持てるかどうか、自分で考えることができるかどうかというものに大きく依存します。理解することの大切さは、やはり本人が自覚しないとどうしょうもないのですが、それが自覚できたとして、どの点に心がけたら理解できるのかというポイントを挙げてみます。

理解したという状態を知ること

そもそも理解したという状況はどういう状況を指すのでしょうか? 一言でいえば「他人に説明できる状態」が理解した状態です。質問されたとしても「曖昧に」「なんとなく」としか答えられない状況は(厳密には)理解したとはいえません。ひとつの物事を取り出せば、半分理解したということもあり得ず、「理解している」か「理解していない」かは完全に2分されます。

例えば「4×3はどうして12になるの?」と聞かれたとき、「4つのものが3つあるから12個になる」といった説明ができれば理解している状況です。しかし「4×-3はどうして-12になるの?」と聞かれたとき、「片方がマイナスのかけ算だから答えはマイナス」といった説明では、理解しているとは言えません。それは(計算法則の)事実として正しいのですが、マイナスという概念を理解してはいないからです。*1

他に例えば「インターネットはどうしてつながるの?」とか、「どうして太陽は東から登るの?」とか、「どうして酸素がないと生きていけないの?」とか、まあともかく、ある事柄に付いてのこの種の質問に答えれれるようになったとき、それを初めて理解したと言います。抽象的な感覚になってしまいますが、答えるときの気分としては心の中で浮かんでいるイメージを言葉としてもどかしいながら繋いで行くという感じになります。「何かで読んだな……たしか……」というのとは大きく違います。

*1 : 数学的厳密性を別としても、この概念を正確にとらえている人は限られますが、深入りはしません

理解するために必要なこと

これは言葉では実に簡単です。「調べる」だけです。とは言っても「太陽はなぜ東から登るのか」→「地球が北から見たとき左回転しているから」という記述を見付けたとして、「ああそうなんだ」で終わらせてはいけません。なぜ「地球が左回転していると太陽が東から登るのか」がわからなければ理解したことにはなりませんし、どうして「北から見たとき」という限定が付くのか、その意味もちゃんと知らなければなりません。

理解ということは、そのような自問自答の繰り返しです。新たに生まれた疑問点を、紙に書いて考えてみたり、再び調べてみたり、考えてもわからなかったら人に聞いてみたりします*2。そうやってすき間無く「分かった」と思うまで「調べたり」「考えたり」という行為をやめてはいけないのです。なれないうちは辛いですし、説明には、例えば「左回転しているので太陽が東から登る」と当り前のように書かれている内容を理解するのに、数日とか1週間とかかかってしまうこともありますが、慣れないうちはむしろそれぐらい時間がかかる方が普通です。人によっては、生涯一度もこのような訓練をしたことがないのですから、時間がかかっても別に落ち込む必要なんてこれっぽちもありません。

もちろん全部が全部そんなことをしていたら、到底身が身が持ちません。ですが、きちんと身に着けたいこと、身に着けなければならないこと、人に説明しなければならないこと、文章にまとめなければならないこと(レポートなど)は、やはり理解する必要があると思います。どうしても時間に迫られているというときでも、基本的には急がば回れです。

ただ、いきなり物事を理解するというのは大変なので、先に十分になれてしまうという方法も有効です。例えば「負数のかけ算」などは、本質を理解することも大切ですが、それよりも前に計算自体に十分に慣れてから本質の立ち返って考えてみる、どういう意味をもつのだろうと自分なりに当てはめてみるというのは、大変有効な手段です。

*2 : たまに勘違いしている人がいますが、自分でろくに調べも考えもせずに人に訊くのはタブーです。そのようなことをしても全く身につかないどころか、説明してくれた内容もすぐに忘れてしまいます。人に訊くときは、例えば「北から見たとき左回転ならば、たしかに(これこれこうで)東から登るのはわかったのだけど、なんで北じゃないといけないのか分からない」といった風に質問します。また「これから○○について勉強したいと思うのですが、どういう道筋で学んだらいいと思いますか?」とアドバイスを求めるのも大変良いと思います。

理解すると何が徳か?

自分の頭の中に、対象の物事の概念ができあがります。このことの効果は計り知れないものがあります。例えばプログラムならば、今まで上手く書けなかったものがすらすら書けるようになりますし、言語が変わってもさほど苦労しなくなります。例えば営業の人ならば、いわゆる営業のテクニックなどの本質を理解することで、その効果を発揮することができます。逆に言えば、理解しなければいくら「○○テクニック」とかを覚えても全く役に立ちません。TVでやるような人づきあいなどのテクニックも同じです。

他にも、色々な資料にかかれた記述やネットの無数の情報のうち、どれが本当で、どれが間違っているかなどを見極める力も付きます。鵜呑みにせず自分で考えるということは、そういう能力を養う練習になっているのです。

簡単に言えば、応用力や情報の判断力、いわゆる考える力が身につきます。はっきり言って、社会でこれほど役に立つものはありません。

2007/02/15(木)AACSがDVD暗号化のように無力になったわけではない

AACS解読(解析)されたと騒ぎすぎで、どこにも正確な情報が見あたらないので書いておきます。もっと詳しい方、捕捉・訂正願います。

AACSの仕組み

タイトルキー(Title Key)

HD DVDやBlu-rayに納められている映像データ(等)はタイトルキーというもので暗号化されています。キーというのはパスワードみたいなものです。例えば、暗号化zipなどを触れたことのある人も居ると思いますが、その中身を見るためには「暗号文」を知らなければなりません。

つまり、映像データを見るためには何らかの手段でタイトルキーを知る必要があります。タイトルキーは製品1つ1つで全部違います以前AACSが破られたと話題になったときは、このタイトルキーを「再生ソフトをクラックするなりなんなりして入手したリストが公開された」というだけの話です。リストにない映像ソフトは結局再生できないので、さしたる問題ではありません

ボリュームキー(Volume Unique Key)

タイトルキーを暗号化している鍵です。

メディアキー(Media Key)

ボリュームキーを生成するのに必要な鍵です。メディア固有の鍵となります。そのメディア(映像ソフト)のメディアキーを入手することで、ディスクに納められている映像をみることができます。

メディアキーは暗号化された状態でディスクに格納されています。これをメディアキーブロック(MKB)と呼びます。

デバイスキー(Device Key)

メディアキーブロックからメディアキーを取り出すための鍵がこのデバイスキーです。デバイスという名前からも分かるとおり、再生ソフトや再生装置1つずつにすべて違った鍵が渡されており、この鍵を受け取るときに「絶対漏れないようにするのでお願いですからデバイスキーをください」といった約束をさせられます。

今回の一件で発見されたと言われているプロセッシングキー(Processing key)というのは、おそらくこのデバイスキーを示すものと思われます。話の流れとしては、「再生ソフトの動きを追っていたら、デバイスキーを見つけてしまった」というわけです。つまり、現存するどんなメディアの映像もこれで復号することができるというわけです。

でもHD DVDやBlu-rayの暗号化が無効になったわけではない

一見、話が矛盾してるよう見えますが、そんなことはありません。たしかに、現存するどんなメディアも再生可能かも知れませんが、これから未来に出るメディア(映像ソフト)は現状では復号不可能です。

仕組みの説明でメディア固有のメディアキーはデバイスキーで暗号化されていることを述べましたが、デバイスキーはすべての再生装置で異なることも述べました。無数の種類があるデバイスキー(再生装置)から同じメディアキーを取り出すための仕組みが重要なのてす。

メディアキーを暗号化して納めているメディアキーブロック(MKB)には、何千~何万種類*1のデバイスキーで暗号化された*2メディアキーが納められています。なんでこのような仕組みになっているかは簡単で、万が一デバイスキーが漏れた時はそのキーは二度と使えなくしてしまえばいいからです。

デバイスキーが漏れる事態は、最初から想定されているのです*3。だから将来出るソフト(映像メディア)を再生しようと思ったら、まだ使える新しいデバイスキーを探さなければなりません。いたちごっこにはなりますが、そのうちデバイスキーが簡単に漏れるようなソフトは淘汰されるだろうというのが、この種の暗号システムの基礎設計になっているわけです。

*1 : 正確な値はHD DVDやBlu-rayの仕様書でも読んでください

*2 : 厳密には違いますが、便宜上こう書きます

*3 : このような漏れるという事態の想定は、暗号の仕組みを作る人間の間では常識になっています。

ではなぜDVDの暗号化が無効になったのか

実はDVDも同じような仕組みになっていて、デバイスキーが漏れた場合はそのキー(再生装置)は使えなく仕組みでした。にも関わらず、今やDVDの暗示化が無力化しているのはなぜか。

それはデバイスキーに用いる鍵が短く(40bit)、しかも鍵を作り出すためのアルゴリズム(手法)が単純だったために、発見された1つの鍵から別の鍵を容易に作ることができたためです。特定の漏れてしまった鍵を無効にすることはできても、ランダムに生成される海賊鍵を予め無効にすることはできません。これによって、DVDの暗号化は無力化されました。

つまり、AACSがクラックされたと言えるのは「AACSデバイスキー(再生装置固有の鍵)の海賊版を容易に生成できるようになった」時であり、それ以外にはまずあり得ません*4

*4 : 「まず」と付くのは暗号分野独特の言い回しです。例えば、デバイスキーを使わずにメディアキーを得る方法が存在しないとは言い切れないということですが、そのような方法は一般にないだろうと信じられています。

追記 2010/09/17

現在のところ、特定のデバイスキーやメディアキーをクラック、AACS側でデバイスキーを無効化というような、際限ない「いたちごっこ」を繰り返している模様。

2007/02/08(木)今日の戯言

Firefoxのばかぁ

adiary開発中は念入りにソースの出力を確認するのですが、~ などエンコードした覚えのない記号が %7E と表示されたりする。何事だと思ってしばらく格闘した結果が、Firefoxのせいというオチに(汗) つまり出力は正常だったと。

Firefox では、範囲選択してソースを表示したときは JavaScript などで書き換えられ、Firefoxにより整形されたソースコードを表示して、選択せずにソース表示したときはサーバ側が出力したソースコードを表示するという仕様みたいです。

……なんだかなぁ。このソースが書き変わってて悩んだ事件は今回だけじゃないんで、今までの時間を返してほしい(苦笑)

なんだかなぁ

この前久しぶりに小説の感想を求められたんで、描写が甘いとかなんとか書いたんですが、特に音沙汰なし。なんだかなぁ。そういや昔はよく他人の小説……に関わらず文章に赤ペン入れてましたけど、気付いたら今はまったくやらなくなってます。

人のことは言えませんが、「そんなんでいいのかよ」とか思うことの多い今日この頃です。なんだかなぁ。

小説も何でもそうだけど、別にこうでなきゃいかんとか言うつもりはないのですよ。でも突き詰めて突き詰めて突き詰めて粘ったときに初めて見えてくる境地、そのときにだけ得られる経験ってのがあって、それってすんごいすんごい大切だと思うから、老婆心ながらそういう経験する機会を放棄するのってすごく勿体ないって思っちゃうんですよね。

小説の添削してたときによく思ったのですが、見当違いな意見を捨ててどの意見を的確なものとして取り入れるのか、それを含め本人の素養の問題ですから、それ以上は他人にはどうにもできない。だから結論としては、なんだかなぁと。


……歳ですかね(苦笑)

2007/02/07(水)Perl な日々(?)

がりがりと Perl で書いたりすると飽きてきまして。無性にCとかC++で書きたくなったりします。早く Perl6 でないかなー。Perl5 は色々とボロがありまして、構造的に美しくかけないんですよね。あとこれ以上早くもできないし。JIT期待してます。

Kerio Personal Firewall入れてみた

日本語パッチはこちら

今までずっと Outpost firewall 1.0(フリー版)を使ってきまして、軽い動作や広告除去など好きだったのですが、いかんせんランダムで発病するOutpost病*1に嫌気がさして乗り換えテスト中です。フリーだと他にZone Alermがありますが、プログラム単位でアクセス制御できないと困るので、Kerioにしました。

Outpostと比較すると

  • 広告除去をオン(30日のみ試用可能)にするとサイト閲覧の挙動がおかしい
  • アクセス許可ポートなど細かく設定できない
  • Outpostよりは重い気がする
  • 標準のままでは、プログラム単位アクセス制御(自動問い合わせ)にならない

とかありますが、あのOutpost病からおさらばできるならいいかなと。

*1 : 突然まったく外部webサイトに繋がらなくなる病気。ほとんど再起動以外に復帰の方法なし

[memo]メモ

  • 賢いソーシャルブックマークはいいと思う。
  • ユーザーが価格を決めるオンライン販売

2007/02/04(日)Windows Media Service(WMS) 代替サーバ wmrelay

wmrelayって?

Windows Media エンコーダ(WME9)には小規模なライブ中継機能(ストリーミングサーバ機能)を持っていますが、最大接続数に制限があり*1、中継元のアップ回線が細いといろいろと不都合が起こります。

Windows Media Services(WMS) などを用いて大規模な中継を行ったり、icecastのように複数の協力者で大規模中継を試みたいところですが、WMS は Windows Serverにしか付属せず、高い上に Windows を外部向けサーバとして運用させるのも気乗りしません。

wmrelay を利用すれば、Linux、FreeBSD、通常のWindowsマシンなどで誰でも手軽に中継サーバを実現できます(mmsプロトコルは非対応です)。協力者を集めれば大規模中継も簡単に行えます。

*1 : 標準で5人、最大で50人まで

ダウンロード

wmrelay_win-img.jpg

ライセンス:GPL (Version 2 or later)

  • wmrelay.zip Version 2.13
    • (Windows) wmrelay.exe を実行(ファイル単体でok)
    • (Linux/FreeBSD) wmrelay.pl を Perl 5.8.1 以降で実行

変更履歴

  • Ver2.13 2010/04/10 -b オプションの追加。バッファディフォルトを 64 に変更。
  • Ver2.12 2009/08/24 [Windows] EXE化をActivePerl5.10ベースにしました。
  • Ver2.11 2007/03/08 [Windows] GUIで動作しない不具合を修正しました
  • Ver2.10 2007/02/13 [Windows] GUI操作画面を作成
  • Ver2.01 2007/02/05 Mac等で動かない問題を修正(Thanks to RXさん)
  • Ver2.00 2007/02/03 全面書き直し。pushサーバ機能追加
  • Ver1.00 2005/06/07 初公開

Linux/FreeBSD等での動作

Linux, FreeBSDなどではPerl 5.8.1以降でithreadが有効なものが必要です。.plをWindows環境(GUI)で使用する場合は、GUI-Loftのインストールが必要です(参考サイト)。

「perl -V」として実行したとき「useithreads=define」と出力されればOKです。

~$ perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
<中略>
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define usemultiplicity=define

動作確認

  • エンコードソフト:Windows Media Encoder 9 (WME9)
  • 再生ソフト:Windows Media Player 6.4*2/9.x, Winamp, MPlayer(Linux)
  • wmrelay動作環境:FreeBSD 6.2、Ubuntu 6.10(Linux 2.6)、Windows 2000

音声のみ、動画再生共に確認してます。

*2 : WMV9 Codecが必要です

使い方

wmrelayはコマンドラインから起動します。使用例は次のようになります。

  • 配信元 http://192.168.1.50:8888/
  • 送信ポート 標準値(8080)
    wmrelay http://192.168.1.50:8888/
    
  • 配信元 http://test-stream.dyndns.org:8080/
  • 送信ポート 8000
    wmrelay -p 8000 http://test-stream.dyndns.org:8080/
    
  • 配信元 http://test-stream.dyndns.org:8080/path/file.asf
  • 送信ポート 9000
  • 最大接続数 200
    wmrelay.pl -p 9000 -m 200 http://test-stream.dyndns.org:8080/path/file.asf
    

オプションの解説

-hコマンドラインヘルプを表示します
-cCUI(GUIをオフにして)使用します(Windowsでの動作時のみ)
-p [num]送信に利用するポート番号を指定します(省略時:8080)
-m [num]最大接続数を指定します(省略時:100)
-b [num]バッファサイズを指定。16,32,64,128,256,512,1024 どれか(省略時:64)
-l [file]ログファイル名を指定します。%p はポート番号で置き換わります
-f [file]プッシュサーバモードでのパスワードファイルを指定します(後述)
-a [pass]プッシュサーバモードでのパスワードを指定します(後述)
-sリレー元からのパケット受信情報を表示しません
-dデバッグ情報を表示します

最大接続数の目安

回線速度(アップ速度)をストリームのビットレートで割れば目安がわかります。スピードテストサイトなどで「Upload Speed」を計測してみてください*3

「アップ速度:0.5Mbps ストリーム:136kbps」の場合0.5*1024 / 136 = 3.7647... (connections max)端数は切り捨てて(必ず切り捨てること)3人が理論限界です。

「アップ速度:12.58Mbps ストリーム:226kbps」の場合12.63*1024 / 226 = 57.226... (connections max) 57人が理論限界ですが50人程度にしておくほうが無難です。

*3 : 「Download Speed」は無関係です

push配信モード

ストリーム受信元URLを指定しないと、wmrelayはpushサーバモードで動作します。このモードでは中継クライアント(Windows Media Encoder9)から中継要求(サーバへのプッシュ要求)があった際に中継が開始されます。

中継先ポートには配信に利用するポート(-p port_number)と同じ番号を指定します。公開ポイントは適当で構いません(wmrelayは公開ポイントを無視します)。

wme9_push.png

また1つのプログラム(1つのポート)につき同時に1つのストリームのみが中継可能です。パスワードを指定しないと誰でも中継可能となりますのでご注意ください。サーバを止めるときは CTRL-C を何度か押してください。

共通パスワードモード

ユーザー名に関わらず、特定のパスワードを入力したクライアントの接続をすべて受け付けるモードです。パスワードは起動時に次のように指定します。

wmrelay -a password

ユーザー別パスワードモード

起動時にパスワードファイルを指定することで、ユーザー別のパスワードを設定します。

wmrelay -f password_file

パスワードファイルは「ユーザー名=パスワード」という書式になります。

# この行はコメントです
user1=pass1
user2=himitsu

パスワードの設定されているユーザーが居ない場合や、パスワードファイルがない場合には、誰でも中継可能になりますので注意してください。

クライアント(リスナー)の使いかた

例えば、10.11.22.33 というIPのマシンにおいて、標準状態の 8080 で中継した場合は、クライアントは次のようにアクセスします。

http://10.11.22.33:8080/

ブラウザから .asx ファイルを経由して表示させたい場合は、ブラウザで次のアドレスにアクセスするよう指示します。

http://10.11.22.33:8080/relay.asx

参考資料