メイン

2007年11月06日

【動画】 Lightweight Language Spirit (LL魂)-LL2007

ITアーキテクト≫オープンソース-【動画】 Lightweight Language Spirit (LL魂)-LL2007:ソフトバンク ビジネス ITにて、LL魂のストリーミング動画が公開されました。

軽量言語の祭典Lightweight Languageは、2003年のLL Saturday、2004年のLL Weekend、2005年のLL Day and Night、2006年のLL Ringと名を変え行われてきた。本動画では、2007年8月4日に行われたLL魂のうち、「Language Update」「オレ様言語の作りかた」「Lightning Talk」の模様をお伝えする。(07/11/01)

早速、手元のIE6の環境(Windows XP SP2)で見ると、ポップアップウィンドウの大きさが微妙で動画の全体が見れないようです。が…、たぶん後ほど修正されるかもしれません。ポップアップ幅が修正されました。

Language Update  ≫総受講時間:64分56秒 /350kbps オレ様言語の作りかた  ≫総受講時間:66分12秒 /350kbps Lightning Talk  ≫総受講時間:56分47秒 /350kbps

スライドの画面と発表者が別々に録画されていたため、 スライドの文字もかなり綺麗に見えて、音声系統も非常にクリア、編集もバッチリです。 ソフトバンククリエイティブさん、ありがとうございます。

2007年09月13日

core dumpするコードの短さを競う「Core Golf」

まめめもさんの core golf のエントリー(6/27)より
さて、core dump するコードの短さで競う core golf はゲームとして成立するでしょうか。明らかに環境や処理系に依存するのでルールの決め方が難しいです。とりあえずうちでは core dump した C のコード (15B) 。もっと短くなる?

core dumpの定義はいろいろあると思いますが、とりあえず手元の環境 CentOS Linux x64_64 で segmentation fault が起きるコードで。

(1) C言語で core dump

早速、core dumpした5byteのCのコード。 (via. λx.x K S K @ はてな - core golf

main;
実行結果
$ echo -n "main;" > a.c && cc a.c && ./a.out 
a.c:1: 警告: データ定義が型や記憶クラスを持っていません 
a.c:1:6: 警告: no newline at end of file 
zsh: segmentation fault  ./a.out

コンパイラの警告は出るけどちゃんと実行バイナリができて、それを実行するとsegmentation faultしてくれます。

(2) Perlでcore dump

正規表現でsegmentation faultを起こすのが簡単かな、と思ってトライ。Perlで22byte。
(via. [perl #33945] Segmentation fault with deep recursion in regex engine

$x=qr/(??{$x})/;""=~$x
実行結果
$ perl -e'$x=qr/(??{$x})/;""=~$x' 
zsh: segmentation fault  perl -e'$x=qr/(??{$x})/;""=~$x'

barewordを使ってもよければもう1byte節約することができますが、とりあえずここまで。

(3) Rubyでcore dump

ruby-devのMLには、最新のrubyをcore dumpさせるコードがたくさん投稿されているようです。以下、手元の環境で再現した5byteのコードです。
(via. [ruby-dev:31085] 0..:" dumps core

0..:"
実行結果
$ ruby -e '0..:"'
-e:1: unterminated string meets end of file
-e:1: empty symbol literal
-e:1: [BUG] Segmentation fault
ruby 1.8.5 (2006-08-25) [x86_64-linux]

アボートしました

最強言語 Ruby ?

あと、Ruby 1.8系では正常に(?)core dumpできませんが、Ruby 1.9 では 4byte で core dump 可能なコードもいくつか報告されているみたいでした。 もしかしたら最新のリリースビルドでは再現できないかもしれません。

$ ruby -e '$&;[]'
$ ruby -e '$`;0'
$ ruby -e '$1;0'
$ ruby -e '{*0}'

ということで、現在 Ruby 1.9 が 4 byte で Core Golf 最強になっていますが、3 byte 以下で core dumpできる処理系をご存知の方がいらっしゃいましたら教えてください。

2007年08月29日

日経ソフトウエア10月号でLL魂レポート

日経ソフトウエア2007年10月号(2007年8月24日発売)の特別レポートとして、イベント「LL魂」報告が掲載されていました。

日経ソフトウエアLL魂レポート

写真もたくさん載っています。ITproの高橋信頼さん、いつもありがとうございます。

2007年08月04日

LL魂お疲れ様でした[LLSpirit]

LL魂、参加されたみなさんお疲れ様でした。みなさんのお陰で無事イベントを終了することができました。ありがとうございました。

前半の20枚だけですが、Flickrに写真をアップロードしました。

LLSpirit amachang

詳しい感想はのちほど。いろいろ新しい刺激を受けました。

とりいそぎ、Lightning Talksの発表資料(※画像はイメージでしたバージョン)を公開します。

先日、PHPの攻撃コードが隠された画像ファイルが、大手ホスティングサイトで発見されたとの報道がなされました。GIF,PNG,JPEG,BMP形式の画像ファイルには、PHPのRFI攻撃で使用されるコードやJavaScriptのソースなどを埋め込むことができます。画像に埋め込まれた攻撃コードと戦う5つの方法について解説し、安全な画像アップローダの実装について考察します。

Webアプリケーションのセキュリティでは、ブラウザのバグやプロトコルの仕様にいつも付き合わされてしまいますが、そういったことを気にせずに開発できる日が来るといいですね。

また来年も(今度は定員1300名の会場みたいなので)よろしくお願いします。

2007年07月17日

LL魂Linghtning Talk発表者タイトル公開

Karetta|LL魂Lightning Talk発表者タイトルを公開しました

今回のライトニングトークは持ち時間1人4分(≠5分)での発表となります。 LL魂イベント最後の締めくくりとして、総勢14名による熱い魂を込めたトークの数々でお楽しみください。

詳しくは、LL魂セッション内容「Lightning Talk」のページをご覧下さい。
http://ll.jus.or.jp/2007/show/Event/Session

No 出場者 タイトル
1 斎藤ただし(筑波大学) PRaggerでピザが頼めるようになるまで
2 中谷秀洋(サイボウズ・ラボ) 外付けwebフレームワークflowr
3 大崎瑶 オープンソースのウィジェットエンジン「Mashed Potato」(を作ります><)
4 飯塚友裕 WebDB開発特化型言語Alinous-Core
5 露木誠(rhaco.org) __init__.php? 変態的国産PHPフレームワークrhaco
6 庄司嘉織 VM魂に入れて貰えなかったJavaFXScript(仮)
7 水島宏太(筑波大学大学院) Power of Scala
8 鈴木高弘(BizMo) Lispのオブジェクトシステムの概要
9 今井宜洋(ITプランニング) Coq定理証明という選択肢
10 高野光弘(日本UNIXユーザ会/日本Rubyの会) D4R - DirectX for Ruby
11 竹迫良範(Shibuya Perl Mongers) イメージファイト!
12 桑田誠 Javaより速いLL用テンプレートエンジン
13 光成滋生(サイボウズ・ラボ) C++のためのx86 JITアセンブラ xbyak
14 西尾泰和(サイボウズ・ラボ) じゃ、どう書く?

P.S.
チケットの枚数も残り少なくなってまいりました。これ以上のチケット追加販売は行なわない予定ですので、 まだチケットを入手されていない方は、ぜひこの機会にお買い求めください。

2006年09月02日

LL Gong - Plagger is a LL 動画公開

先週の LL Ring の発表の様子を撮影した動画がYouTubeで公開されました。
動画を撮影されたshibasrさん、話をつないでくれたuemuraさん、ありがとうございました!

View LL Gong - Plagger is a LL at YouTube

LL Ring のチケットを買えなかった人、地方在住のため今回は参加できなかった人も多かったようで、
YouTubeの動画で少しでも会場の雰囲気を味わっていただければと思います。

発表資料のスライドはLLの公式サイトでダウンロードできるようになっています。

でも、やっぱり現地の空気を肌で感じるのが一番です。
次回はぜひ会場にお越しくださいませ。

2006年08月30日

LL Ring で代理発表(Perl/Plagger)

先週のの土曜日8/26、新木場1stRINGでLL Ringが開催されました。

新木場1stRING

名前の通り、プロレス会場の特設リング上で1日中プログラミング言語に関する発表をしてしまうという前代未聞のマッシュアップ企画なのですが、このたび本当に実現してしまいました。 謎の覆面レスラーあり、パイプ椅子あり、haltコールあり、とネタ的にも十分楽しめるものでした。 中身についても関数プログラミングについて熱く語り合う真面目なパネルディスカッションや、 ボット同士が戦うじゃんけん2.0、フレームワーク対決など内容も盛りだくさんで、 総勢300名以上のお客様にお越しいただきました。ありがとうございます。

Language Update - Perl

例年のLLイベントで毎年参加されているお馴染みの小飼弾さんが今年は参加されないとのことで、午前中の Language Update(写真付き紹介) のセッションでは、 Danさんの代理(Perl代表)として出場させていただきました。

LL Gong - Plagger is a LL

リング上での発表の様子

あと、miyagawaさんの代理で、最後のLL GongでPlaggerの発表も。 誠に恐縮ながら今回のイベントのトリを務めさせていただきました。

発表資料

プレゼンに使用した発表資料ですが、後日LL Ringの公式サイトからダウンロードできるようになると思いますので、今しばらくお待ちください。

写真・動画


参加者の感想

このような素晴らしいイベントを準備して下さったスタッフ皆様、 会場を盛り上げてくださった発表者の皆様、 普通ではありえない場所で長時間お付き合いいただいた参加者の皆様、 今回は参加できなかったけどLLを愛している皆様、 本当にありがとうございました。 最後に流れたエンディングのスタッフロールには感動しました。

ちなみに・・・、今回使用した新木場のプロレス会場では、IWA・JAPAN唯一の女子プロレスラーの竹迫さんが次の日の日曜日にいらしていたそうです。同じ苗字な方ですが、Googleのエゴサーチで負けています。><

2006年07月31日

LL Ring の会場すげぇ

今日は LL Ring の会場「新木場1stRING」に下見に行ってきました。

LL Ring 会場 - 新木場 1st RING

まさか、本当にリングでやるとは・・・

Language Update と LL Gong では
Perl/Plagger代表として参戦する予定です。
どうか皆さんお手柔らかにお願いします。

2006年06月26日

Brainf*ckで100までの素数を列挙してみるテスト

キミならどう書く 2.0 - ROUND 1 -

LL Ring の前哨戦として「キミならどう書く 2.0」の開催です!
お題は「100までの整数から素数を列挙せよ」です.

ということで、世界最小のコンパイラ/インタプリタと言われている
Brainf*ckで1~100までの素数を列挙してみました。

ちなみに brainf*ck で prgramming するのは今回が初めてです。

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Wikipedia日本語版の解説より

開発者Urban Müllerがコンパイラがなるべく小さくなる言語として考案した。実際、Muellerが開発したコンパイラのサイズは123バイト(キロバイトではない!)、インタプリタは98バイトしかない。また、実行可能な命令はわずか8つしかない。

処理系には十分なサイズのbyte型配列とその要素のひとつを指すポインタがある。ポインタを「>」「<」命令で移動させながら、そのポインタが指す値を増減させて処理を進めていく。 これだけでチューリングマシンで実行可能なあらゆるプログラムが記述できるとされている。

Brainf*ckの言語仕様は非常に単純で、

  1. > ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。
  2. < ポインタをデクリメントする。C言語の「ptr--;」に相当。
  3. + ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。
  4. - ポインタが指す値をデクリメントする。C言語の「(*ptr)--;」に相当。
  5. . ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。
  6. , 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。
  7. [ ポインタが指す値が0なら、対応する ] までジャンプする。C言語の「while(!*ptr){」に相当。
  8. ] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。

以上8命令を組み合わせてプログラミングするだけです。


ね、簡単でしょ?


素数の列挙には lookup table という超高速なアルゴリズムを採用しています。:-)

Brainf*ckではbyte型の配列つまり0~255の整数しか扱えないため、256以上の素数を真面目に計算しようとすると多倍長演算をサポートしないといけません。ふつうの中学生は素因数分解の問題を解くのに100までの素数は大体暗記してるでしょ、ということで、実は lookup table という手法は現実世界に近い解なのです。

じゃあ、100以上の素数を列挙したい場合はどうすればいいのか?という素朴な疑問に
お答えするため、ppencode ならぬ bpencode なるものをさらに作ってみました。


bpencode - Brainf*ck Prime Encode for JavaScript


bpencode - Brainf*ck Prime Encode for JavaScript

ブラウザ上で brainf*ck のプログラミングの様子を動作確認できます。

上のデモ画面では、300までの素数を表示する brainf*ck のプログラムを動的に生成しています。
ブラウザでの計算速度の限界があるため、今のところ5桁の数字99999まで対応しています。


どうぞご利用ください。

続きを読む "Brainf*ckで100までの素数を列挙してみるテスト" »