Friday, September 6, 2013

私はクーダムで私を襲って怪我をさせて逃げた男を探している

奇妙な紙をしょった男が駅に座っていた.彼の紙には次のように書いてある."Ich suche nach einem Mann, der mich am 5.9 um 0:40 Uhr auf dem Ku'damm tätlich angegriffen hat und dann weggelaufen ist. Er rief, dass er alle Ausländer, Chinesen und Japaner hasse. Wenn er wirklich dir Zukunft von Deutschland (und der Welt) retten will, dann kann ich ihm einen Job anbieten. Aber nur für kurze Zeit. Sehe sundayresearch.eu".

私の翻訳 「私は9月5日 0:40 にクーダムで私を襲って怪我をさせて逃げた男を探している.その男は全ての外国人,中国人に日本人が憎い.と言っていた.彼が本当にドイツ(と世界)を救おうという気があるのなら,私には彼に仕事を与えることができる.しかしすぐでないといけない.sundayresearch.euを見よ.」

A man with eyepatch.

Zoom in to the message.

Wednesday, September 4, 2013

空白を含むコマンドラインオプションを bash スクリプトに渡す:$* と $@

私は bash にしろ C++ のプログラムにしろ,コマンドラインを処理する時にはできるだけ規則的なものだけにして極力簡単で済ませるようにしている.たとえば,全ての引数は
'-arg_key value'
のようなものであり,たとえ必要なファイル名であってもできるだけこの規則に従うようにしている.この場合,コマンドラインのオプションは必ず key を持つのでその結果は map に入れておけば良い.こうするだけでパースのコードは驚くほど簡単になり,getopt などを使う必要もない.また,コマンドラインのサポートはできるだけ簡単にしてできるだけconfig ファイルを用いることにしている.というのは,1つはこの方法では負の数値の指定に困るからであり,もう1つはテストなどでの再現が簡単だからである.

しかし,この方法はコマンドラインオプションの value が空白を含む場合には問題が起きる.できれば config file だけですませたいが,そうもいかないこともある. そのような例を示そう.

たとえば vector 値を渡したい場合に

   command -eye_position '0 0 -10' -up_vector '0 1 0'

とするような場合を考える.C++ のプログラムを手動で起動する場合には問題はないが,これが test case などで shell script や python から呼び出したい場合には注意が必要である. この例を test_1.sh に示す.

-- test_1.sh --
echo "call with two args, but the second one has spaces."
echo "./test_2.sh args0 'args1_1 args1_2 args1_3'"

./test_2.sh args0 'args1_1 args1_2 args1_3'
-- test_1.sh --

呼び出される test_2.shはコマンドラインがどのように解釈されるかを示す.

-- test_2.sh --
echo "show the args with \$*."

for i in $*
do
    echo " $i"
done

echo "show the args with quoted \"\$*\"."

for i in "$*"
do
    echo " $i"
done

echo "show the args with \$@."

for i in $@
do
    echo " $i"
done

echo "show the args with quoted \"\$@\"."

for i in "$@"
do
    echo " $i"
done
-- test_2.sh --

私が test_2.sh で引数として解釈して欲しいのは,

  • $1: args0 
  • $2: args1_1 args1_2 args1_3

のように2つの引数で2つ目の引数には空白が残っているものである. このスクリプトの実行結果は以下のようになる.

-- result --
call with two args, but the second one has spaces.
./test_2.sh args0 'args1_1 args1_2 args1_3'
show the args with $*.
 args0
 args1_1
 args1_2
 args1_3
show the args with quoted "$*".
 args0 args1_1 args1_2 args1_3
show the args with $@.
 args0
 args1_1
 args1_2
 args1_3
show the args with quoted "$@".
 args0
 args1_1 args1_2 args1_3
-- result --

$*や$@ではスペースがあるために他の引数として解釈されてしまう.そこで quote すると"$*"では1つの引数として考えられてしまう."$@"が私の欲しいものである.これが bash での$*と$@の違いである.細かいことであり,知らなくてもいいことではあるが,これを知っているとちょっといいかもしれない.

Myron Krueger の驚きのデモ 1988.

インタラクティブアートや virtual reality のさきがけということである.既に二本指を広げることで画像を拡大したり,指で画像を移動させるという,今ならタブレットやスマートフォンでよく見ることが実験されている.(4:30あたり)

http://youtu.be/dmmxVA5xhuo?t=4m30s

しかし,ちょっと変だと思ったのは,昨年の訴訟ではこれは Apple の発明の1つであり,Samsung はこれらによって 10 億ドルを支払うという話があった.

http://itpro.nikkeibp.co.jp/article/NEWS/20120827/418281/?ST=smartphone

この発明は Apple の 2005 年の発明であるそうだ.

さらに不思議なのは,このズームのジェスチャーを 1993 年に発明したという人があらわれて,Apple に勝訴しているということである.
http://easthamptonstar.com/News/2013829/Springs%E2%80%99-Own-Beats-Apple

Myron Krueger のデモはいくつもの意味ですごいものだ.それ自身のすごさがあり,そしてこの訴訟の無意味さを示し,特許制度の破綻まで示している.