シェル関数でタイムアウト

うーん,と新しいアルゴリズムを考えて,とりあえず,プロトタイプ実装する,ということを,ときどきします.その後は,たいてい,パラメータをいろいろ変えてみて,データを取得するのですが,プロトタイプなので,よく異常終了したり,もっと悪い場合は無限ループに入るのか,だんまりになったりします.週末にデータを取ろうと思っても,起動して数パターンのデータを取得したところでスタックして,そのまま週末のほとんどをムダにする,なんてことがよくあります.

そこで,一定時間内に応答が返ってこなかったら,強制終了するタイムアウト機能がほしい!ということで,そんなシェルスクリプト・コマンドはいくらでもあるだろう,と思っていたのですが,ほとんど見つかりません.

なので,自作してみました.使い方は,timeout 5 sleep 10とかすると,10秒スリープしようとするのですが,約5秒でタイムアウトして,プロセスがKILLされます.echo文は動作確認用なので,実際に利用する場合は,適当に削除してください.

timeout()
{
    count_timeout=$1
    shift 1;
    echo exec \'$@\'
    $@ &
    pid=$!
    count=0
    while [ $count -lt $count_timeout ]
    do
	isalive=`ps -ef | grep $pid | grep -v grep | wc -l`
	if [ $isalive -eq 1 ]; then
	    echo $pid is alive.
	    count=`expr $count + 1`
	    sleep 1
	else
	    echo $pid was disapeared.
	    count=`expr $count_timeout`
	fi
    done
    isalive=`ps -ef | grep $pid | grep -v grep | wc -l`
    if [ $isAlive = 1 ]; then
	kill -kill $pid
	wait $pid
	echo $pid was terminated by a SIG$(kill -l $?) signal.
    fi
}


timeout 5 sleep 3
timeout 5 sleep 10

これでよし,と思ったら,netatalkのパッケージにtimeoutという,そのものズバリのコマンドが含まれているようです...

まぁ,netatalkのパッケージがどこにでもインストールされているわけではないし,timeoutのためだけに,netatalkをインストールするのも問題がある(かもしれない)ので,それなりに利用価値は残っていることにしておきます.

DEFCON13

今年もDEFCONが終了したようです。DEFCONは、世界中(といつつ全米のほうが正確?)から、セキュリティ関係のハッカーが集まるお祭りです。去年のDEFCON 12では、「TCP over DNS」やanonymous overlay networkである「tor」が、なかなかショッキングでした。

今年は、DEFCON13となるわけですが、audioやvideoを配布しているサイトを見つけました。MakeZine.com: DefCon 13 Coverage。かなりのボリュームなので、じっくり見ていきたいです。

一つだけ分り易いのをピックアップしますと、無線LANでリンクが確率できる最長距離を競うというイベントがあります。背丈より大きいアンテナをつかって、砂漠に出かけていって、無線LANでの通信を試みる、という競技です。去年は、これまでの記録をずいぶんと伸ばして、55.1マイルという記録でしたが、今年は、なんと125マイルまで伸びたようです。ここまでくると、琵琶湖大橋まで到達してしまった鳥人間コンテストを彷彿とさせます。最終的にどこまでいくのでしょうか。
MAKE: Blog: @ DEFCON - New World Record for Wi-Fi Distance: 125 Miles

rss2imap 改め feed2gmail

以前(id:hcr:200506019),rss2imapをベースにいろいろ手を入れていて,もうすこし調整したら公開したい,などと言っていましたが,1ヶ月も経とうというのに,TODOリストが空になりそうもないです.
そういうわけで,とりあえず公開してしまいたいと思います.(rss2imapがGPLなので、派生ソフトウェアであるfeed2gmailもGPLです)

当初は,imap + thunderbirdがいい,と言っていましたが,その路線は止めて,gmailをターゲットとして最適化することに方針変更しています.ページ自体も,まだまだ書きかけですが,徐々に補充していきます.また,ページ自体は英語で書いていますが,そのうち日本語版も作ります(たぶん).一応,必要最小限のことは記述しているつもりですが,使い方は,想像で補完してください.

あと,試したいけどgmailアカウントがない,という奇特な方向けにgmailの招待リンクを張っておきます.先着一名でどうぞ.できれば,感想をコメントに書いていただけると幸いです.
https://mail.google.com/mail/a-d7ffc26c80-1cd0ac6314-6922e09049


参考までに,現在リストアップしている残ToDoは,こんなところです.いずれ実装されるかもしれません.

  • atom対応する.
  • クロール頻度を設定可能とする.
    • 更新されていない場合,自動的に調整する.
    • last-modifiedを見て,たまにスキップする.
  • ちゃんと1時間ごとにクロールする
  • なんでもRSSのようなfeedをなんとかする.
  • サイト一覧のopml化を考える.
    • サイト登録・編集UIも考える.
  • qdbmの是非を考える.
  • クロールのマルチスレッド化を考える.
  • マルチユーザ化も,ちょっと考える.

ちなみに上記のサイトは,MediawikiTRACを使ってみたかったので,作ってみたサイトだったりします.が,デザインはデフォルトのままなので,統一感がまったくないのも,なんとかしたいところです.

Gizmodo Japan

ガジェット紹介サイトとしては,たぶん1,2を争うであろうGizmodoにJapanカテゴリーができてました.最初のネタは,auStar wars関連の広告です.アキバ系のオンパレードになるかと危惧していたのですが,わりと普通なので,一安心です.

Studying Abroad in Japan has posted a couple of snapshots of these great posters for AU’s Star Wars campaign that i’ve been spotting around yamanote line stations lately. *1

ところで,元ネタのブログ「Studying Abroad in Japan」が,なかなか面白いです.外国の普通の若者の日本を見る視線を,垣間見ることができます。昔,Lonely PlanetのJapanを読んで,面白がっていたのですが、それに通じるものがあります.

ちなみに,Lonely Planetには,「日本のホテルは高いので,公園にテントを張って寝るのがいい」などとむちゃくちゃなことが書いてあって,大笑いした記憶があるのですが,今もその記述は残っているのでしょうか?

*1:Gizmodoでは、“vader has a schoolgirl fetish”とかひどいことを言ってます

「コンピュータが将棋を制する日」

今月号の情報処理学会誌が「コンピュータが将棋を制する日」という特集を載せているのだがこれがとても面白かった。適当にかいつまんで紹介したい。

とても面白い,ということなので,私も読んでみたところ,やはり,非常に面白い記事でした.

コンピュータが人間に勝つ,というと,チェスで1997年にDeep Blueが人間のチャンピオンに勝っています.ただ,よく言われている通り,将棋には「持ち駒ルール」があるので,特に終盤での可能な手が絞られていかない,ということがあります.それによって,ゲーム全体での場合の数の差は,

  • 将棋 10^220
  • チェス 10^120

となります.だいたい将棋はチェスより,100桁ほど難しい,と言ってもいいかもしれません.

コンピュータは,考えられる,ありとあらゆる手を試してみて,実際の手を決めます.単純化すると,「この手順だと10手先に飛車が取れるので,100点」などと,それぞれの手順を評価関数で点数化して,最適手を見つけ出します.勝負は,どれだけ先読みできるか,ということと,評価関数を,どれだけいいものにできるか,ということで決まります.ただ,持ち時間は有限なので,先読みの段階で,いかに有望な手を探索するか,ということが鍵となります.すこし前は,このあたりを,泥臭いチューニングによって強くしていましたが,最近は理論派が有利となっているようです.特に今年に行われた,実際のプロとの対戦では,短期的には,良くも悪くもない「含みのある手」を指せるようになった,という大きな進歩が得られたようです.

記事では,このあたりの最適手を見つけ出す手法も,概要が紹介されています.いくつか興味深かった点を書き出してみました.

  • ゲーム木の探索範囲の制御(ゲーム木の枝苅り)及び評価関数には,多くのヒューリスティクスが利用されている.
  • 枝苅りについて
    • 枝苅りには,過去の棋譜から得られる「実現確率」をベースとして判断する.
    • 「直前に動かした駒,を取る or から逃げる」といった手を重点的に探索する.
    • 浅いレベルの探索結果を利用する.類似局面での最善手を再利用する.
  • 評価関数について
    • 序盤・中盤・終盤で,評価の観点が変化するが,それを離散的ではなく,連続的に評価する.
  • 探索速度について
    • 1秒に30万局面を探索し,1分で1,700万局面を探索する.

この記事では,将棋のような分野は「量が質に結び付く幸運な性質」がある,とされています.将棋では,「時間が無限にあれば,全探索することができ,絶対的な最適手を打つことができる」ので,あとは結果を劣化させることなく時間を短縮する手法を頑張ればいい,ということなのでしょう.やることがはっきり定義できる分野では,コンピュータが強いです.著者は「2015年にはコンピュータが人間のチャンピオンに勝つ」と明言しています.

ときどき,人間がコンピュータに負けるとショックを受ける人がいるようですが,問題をはっきり定義できない分野や,問題を定義すること自体は,将来的にもコンピュータにできるようになるとは,とても信じられないので,そんなに気にすることはないのにねぇ,と思います.早く走ることを車と勝負する気にならないように,定義された問題を考えることをコンピュータと勝負する気にならない日がやってくるだけなのでしょう.

インタビュー: キートップがディスプレイのキーボードのデザイナー

先日,Optimus Keyboard(キートップがディスプレイのキーボード)*1が話題となっていましたが,そのデザイナーへのインタビュー記事がありました.例のごとく,超訳を書いておきます.

このキーボードは、15年前の学生だったころから構想していた.デザイナーになって自分の会社を起こしたから,アイデアを実現できるようになったんだ.それに,ロシア語のキーボードのレイアウトは,かなり失敗作なので,普段は自分でレイアウトしたものを使っているんだ.昨今のキーボードはプログラマーによるプログラマーのためのもので,自分自身のものが欲しかった.

現在,Optimus Keyboardは,製造業者や販売業者と交渉中で,一年後には,うまくすると$200〜$300ぐらいで提供できると思う.

Happy Hacking Keyboard Professionalよりは,ちょっと高いってくらいみたいですね.うむむ,そそられます.