2010-04-01
■ [esolang] プロのesolang作家としてデビューしました
「Rubyで作る奇妙なプログラミング言語」の上梓から1年。Esoteric Languageの概念も人口に膾炙したと判断し、奇妙なプログラミング言語を有償で製作する事業を開始いたしました。いわゆるプロesolang作家です。
4839927847
第一弾となる「ModanShogi」がgihyo.jpのサイトで公開されています。お楽しみ下さい。
今後は後輩の育成に励み、日本esolang作者協会を設立して利権で儲けるなどしたいと思います。よろしくお願いします。
2010-04-02
■ [esolang] プログラミング言語ModanShogiを公開しました
gihyo.jpのエイプリルフール企画のために、プログラミング言語ModanShogiを作りました。
処理系も作ったので、良かったら実際に動かして遊んでみてください。アセンブラ知ってる人なら簡単だと思います。 *1
Strictモードについて
記事中に「不正な駒の動きをエラーとするStrictモードの搭載を予定している」みたいなネタを書いたところ、 Strictモードで実際にプログラムを書いてしまった人が!
putcが小数に対応してない件は修正しました。ありがとうございます。
小数を仕様に含めたのは、単にいままで含めたことがなかったのでやってみたかっただけなんですが、まだいろいろ調整が必要そうですね (特にputn周り)。
ラベルが「*1」なのはなんというか苦肉の策です。元々は:jump_ifは「指定した値の数だけ命令を飛ばす(pc+=val)」みたいな仕様を考えていたのですが、 実際にfizzbuzz書こうとしたらループ内の命令増やすだけで命令数数え直しでさすがにマゾすぎたので、こうなりました。 確かにラベルの個数が9個までで良ければ、構文を増やす必要は無かったですね。「▲5九成銀」で [:label, 5] 相当とか、どうだろうか。 成銀とか使いづらいので大変そうですが*2。入れたい命令が多すぎて困る。
Strictモードはほとんどバランス調整してないんですが、一応気をつけたのは
- なるべく緩くする (先手後手や、「打」「右」「引」に意味を持たせない)
- 実戦での駒移動の頻度と、命令の実行頻度が (できるだけ) 近くなるようにする
くらいでしょうか。でもまあ難しかったです。
[図1] 161手目まで - 先手、挨拶六段の勝ち

[図2] 92手目まで - 後手の勝ち

言語名について
棋譜をモチーフにするというアイデアはわりと前から考えてて、レジスタVMも面白そうだな ということでこうなりました。
最初はModernShogiにしようかと思ってたんですがさすがに迷惑 かなということでこうなりました。
当初は別の言語(Sumotalk)の方を考えてたんですが、一向にまとまらないので放置することになりました…が、 100%満足行かなくても公開すればいろいろ良いフィードバックがあることを学んだのでこっちもできればそのうちに。
将棋については駒の動かし方くらいしか知らなかったので、マーケットプレイスで4冊ほど買って読んでみました。 どれも面白かったですが、言語仕様には特に影響がなかったですw 4120040283 4047100080 4480063927 4047101079
*1 youzさんが CommonLispに移植してくださってるみたいです
*2 棋譜としては「成銀」じゃなくて「金」と書けば済むことで、「金」では曖昧性が生じる場合にのみ成銀と書くはずです。というかその場合でも「金右」「金引」とかで書く方が多いのではないかな
■ [ruby][english] InfoQの動画はけっこう英語の勉強になると思う
なぜなら文字起こしがあるからである。喋ってることのほぼ全文がテキストとして提供されている。有り難いことである。
- InfoQ: Evan Phoenix On Rubinius 1.0
- InfoQ: Chris Wanstrath on GitHub
- InfoQ: Ruby Creator Yukihiro "Matz" about Ruby, Functional Programming and Programming Languages Design
- InfoQ: Nathaniel Talbott on Experiment Driven Design
たまに文字起こしじゃなくてスライドのときもあるけど。
2010-04-04
■ [ruby][book] Rubyを使いこなすための一冊、『Rubyベストプラクティス』
「Ruby Best Practices」の和訳がオライリーから出て、読みたいなーと思っていたらなんと献本をいただいてしまった。 有り難いことです。
4873114454
内容を一言でまとめると、「実践Ruby」あるいは「Ruby中級者レッスン」という感じ。 4873113008の方とはちょっと毛色が違ってて、Rubyの正しい書き方というより、 Rubyを実践的に使う際のさまざまなトピックについて解説されている。
Rubyでプログラムを書き始めた人から、Rubyを長く使っている人まで、読めばなにかしら得るものがあるだろう。 僕も(まだところどころしか読んでないが)いくつか「なるほど」と思うことがあった。
1章はテストについて。
2章はRubyでのAPI設計について(引数・ブロックとかね)。
3章はRubyの動的さを生かしたテクニックについて。
4章はテキスト処理とファイル管理について(tempfileとか)。
5章はRuby上での関数型プログラミングのテクニックについて(無限リストとか)。
6章はデバッグ(inspectやLogger)について。YAML(Kernel#y)をppの代わりに使うというのはなるほどなぁと思った。
7章は他言語化について(CSIなやり方、UCSなやり方、アプリの他言語化)。
8章はライブラリをgem化して配布する際のいろいろな話題。
さらに、付録Aは1.8と1.9の両方で動くRubyスクリプトを書く方法、付録Bは便利な標準添付ライブラリの使い方が紹介されている。どこまでも実用的な本書なのであった。
最後の付録Cでは、「Rubyワーストプラクティス」として、いくつかのやらない方が良いことが列挙されている (「eval使いすぎ」とか)。
さて、実は英語版が先日からPDFで全文公開されている…どころか、本の原稿そのものが公開されていたりする。
だが日本語の方がやっぱり読みやすいし、物体としての本は、存在するだけで「読まなきゃ」というリマインダになる :-)。
2010-04-14
■ [ruby] Common Lisp的な、「再開可能な例外」をRubyで
実装は以下。もちろん継続ですw
例:
10.times do |i|
begin
raise "OH NO!"
puts "OH YES! #{i}"
i += 1
rescue => err
if i < 5
err.continue ### これ(Exception#continue)が「例外が発生した次の行」に飛ぶ
else
raise err
end
end
end
実行結果:
/tmp % ruby-1.9 -rcontinuation a.rb
OH YES! 0
OH YES! 1
OH YES! 2
OH YES! 3
OH YES! 4
a.rb:48:in `rescue in block in <main>': RuntimeError (RuntimeError)
from a.rb:40:in `block in <main>'
from a.rb:39:in `times'
from a.rb:39:in `<main>'
2010-04-16
■ [rails] Rails2/3用の認証プラグイン「devise」
Railscastsに簡単な紹介が上がってますのでそちらをどうぞ。
特徴は
- 必要なモデル・コントローラはUserのみ (Sessionは使わず、/user/sign_in とか create_user_session_path とかを使う)
- 認証周りのいろいろな機能がそれぞれモジュール化されている (confirmable, :recoverable, :rememberable...)
とか。
Ruby Toolboxの他のプラグインとの比較は:
だそうで。Authlogic: a really great piece of code and functionality, but a bit messy by handling the session in a model. It also only handles the model part.
Clearance: full stack, Rails Engine, extra modules, everything we needed. However, packaged with a User model and without the ability to customize it.
■ [prog][iphoneos] iPhone OSのインタプリタ禁止縛りについての徒然
@nanki, @ujmとのチャットのまとめ。
- Opera miniってJS動かないよね
- 動くよ
- あれ、インタプリタ禁止じゃないの?
- →調べたら、JSはサーバサイドに贈って実行してたw無茶しやがる
- ということはRubyコードをサーバ側で動かせばirbも…!
- ていうかライフゲームは認証通ってるじゃん、チューリング完全なのに
- ということは
- 「全く新しい形のライフゲームです!!」と言い張れば
- brainf*ckも通るし、irbも通る
- プログラマブル電卓みたいのもインタプリタだよね
- 「高機能な電卓です!!」と言い張れば、irbも(ry
- それではこの画像を見ていただこう

- 関数電卓どころか、既にRoR (Ruby on Rails)まで実装済み…だと
- (1)チューリング完全でない
- (2)ネイティブライブラリを叩けたりしない
- (3)外部からコードを持ち込まない
- のいずれかを満たせば認証が通る、という仮説。
- irbは明らかにプログラミング言語っぽいので通らないのではないか
- ということは明らかなプログラミング言語でなければ通るのではないか=時代はesolang
- 例:将棋ソフトに偽装したModanShogiインタプリタ
- 「このファイルを削除しますか?(成/不成)」
2010-04-18
2010-04-28
■ [ruby] rvmを使うと、複数のRubyを共存したり、Rails 2/3を共存したりできる
という話がRuby Freaks Loungeに上がってましたね(丸投げ)。
- Ruby Freaks Lounge:第39回 RVM(Ruby Version Manager)による環境構築|gihyo.jp … 技術評論社
- Ruby Freaks Lounge:第40回 RVM(Ruby Version Manager)による環境構築(2)|gihyo.jp … 技術評論社
今のところMacPortsのruby 1.8.7を普段使いとして、自前コンパイルの1.9.1を動作確認用として使ってるんだけど、 そろそろrvmに乗り換えてもいいかなーと思ったり。
rvmの利点の一つはgemsetで、Rails 2.3.4とRails 2.3.5とRails 3 beta3 を共存させたりできる。(使う前にrvm use ruby-1.8.7@rails3 みたいにして切り替える)
gemsetの仕様がまだ把握できてないんだけど(というか仕様固まってるのかなw)、
- 各Ruby処理系ごとにいくつかのgemsetを作れる
- 例:ruby-head@rails3, ruby-head@rails2, ruby-head (←デフォルトのgemsetは無名)
- "global"という名前のgemsetにインストールしたgemは、そのRuby処理系に共通のものとなる
- 例:ruby-head@globalのgemは、ruby-head@rails3、ruby-head@rails2、ruby-headのどれからでも見える
ということでいいのかな。
つまり"global"とはいえRuby処理系をまたぐことはできないと。まあCRubyとJRubyだとインストールするgem違ったりするから(拡張ライブラリ系のやつね) そんなもんかな。
2010-04-30
■ [tetris] 「一番来てほしくないミノ」が来続けるテトリス
18ラインとかで死ぬ。難しすぎる。
初代TGMプレイヤーとかで、「ツモを信じないスタイル」を極めてる人だとどれくらいできるんだろうか。
んで、それをさらに厳しくしたのがこっち。
アクション性もランダム性も排除されているので、どっちかというと理詰めパズルに近い。
■ [web] < SL >: 電子書籍のフォーマットには HTML を使いましょう
同意。
pragprogの本をPDFやepubで読んでみたけど、ページ単位でしか表示できないのがすごく違和感あるんだよな。 HTMLみたいにだらーっとスクロールしながら読みたい。{{fn "PDFだとページごとにヘッダ・フッタが入ってたりして邪魔なんだ。スクリーンの幅に合わせてもくれないし(epubはこのへんはクリアしている)。}}
本って、本来は連続したコンテンツなわけで、ページに切らないといけなかったのは印刷・組版の都合上ですよね。 電子デバイスには不要なはず。
iBooksだとページをめくるアニメーションとかが出て「すごい!」という気になっちゃうんだけど(笑)。 デジタルデバイスに馴染みのない人のために、電子書籍の心理的な抵抗を減らす*1 という意味では大事なのかも知れんけど、少なくとも技術書くらいは、連続表示できる形態で読ませて欲しいです。
(iPhone/iPadで、epubをそういう表示にできるソフトがあったら教えてください)
*1 「ほらほら、こんな機械に入ってますけど、これは『本』なんですよ」
■ [lisp] Common Lispで人工知能を学ぶ本「PAIP(Paradigms of Artificial Intelligence Programming)」の訳書が発売
過去に読書会も行われていた (らしい)、 PAIPこと「Paradigms of Artificial Intelligence Programming」の 翻訳書が出るそうです。
4798118907
人工知能の本だと思ってたんですが、タイトルは「実用Common Lisp」。
これを読むと、プログラミング、Lisp, AI(人工知能)のことがわかります。
特に、Lisperの問題のとらえ方、解き方、発想法、いかにもLisp的なプログ
ラミング技法(たとえばマクロや高階関数)もわかります。
[緊急特報!Peter NorvigのPAIPの翻訳「実用 Common Lisp」が出る\(^O^)/: ホットコーナーの舞台裏より引用]
ということなのでLisp側に倒したのかな。(あるいはLisp本の方が売れる?) 確かに「」(Practical Common Lisp)と紛らわしいですが。
6.でも,今読むものとしては,NorvigのPAIPがダントツのお勧めです.
最初これを出た直後のアメリカの学会で買って,読んで見て,驚天動地の思いでした.よく一人の人間がこれだけ纏めて書けるものだと.それからは,Russell&Norvigの人工知能が出るまでは,これが私のバイブルでした.
[セマンティックウェブ・ダイアリー:PAIPより引用]
原書はこちら:Paradigms of Artificial Intelligence Programming
1558601910

□ naoya_t [モダン焼フジ!!!]