2009-02-01
■ [games] *勝利*した
(変愚蛮怒というゲームで、クリアすることを「*勝利*」と呼びます。)
獣人アーチャーでチーターマンプレイするつもりが、放射能でアンバライトになってしまったのも良い思い出 (種族変更を防ぐには、カオスじゃなくて毒耐性が必要なんですね)。
変愚を最初に触ってからもう5年くらいになりますけど、これが初*勝利*でした。 道中、いろいろアドバイスをくれたdisプロに感謝。
2009-02-02
■ [ruby][event] 松江Ruby会議-01で発表しました
なんかRegional RubyKaigiのためにそうそうたるメンツが松江に集まると聞いて、 新ネタでLTしてきた。
RubyStationは「Rubyアプリを配布するためのツール」である。が、まだあんまり考えがまとまってない。
家に帰ってからもう少し考えたんだけど、たぶん主張したいことが2つあって:
- (1) RubyGemsは「ライブラリを配布する」には十分な手段だけど、「アプリケーションを配布する」にはもう一層ガワがあるといいんじゃないか
- (2) Rubyでデスクトップアプリを作るとき、「GUIライブラリとしてRailsを使う」のは結構良い選択肢なんじゃないか
という。上のスライドは両者がごっちゃになってるので分かりづらいかも。
「Rubyのクールなライブラリ」って言われたらたぶん何十個も挙げられるけど、 「Rubyのクールなアプリケーション」って言われたらそんなには列挙できない。 もっと、Rubyでアプリケーションが作られるべきじゃね? 今のRubyには十分そのポテンシャルがあるし、それを生かし切れてないのは残念なことだ。
ありそうな質問
- Q.
- 要するに、RubyGemsにGUIつけただけでしょ?
- A.
- 違うよ。全然違うよ。
RubyStationはインストールだけじゃなくて、アプリを起動するところまで面倒を見る。 ので、ユーザはターミナルでコマンド打つ必要がないし、開発者もREADMEに頑張って起動方法を書く手間から解放される (今のところ、start.rbとstop.rbを用意してもらうという規約を考えている)。
結論
「面倒なところは俺がなんとかするからもっとRubyでアプリケーション書こうぜ」
名前について
「Rail(s)が伸びていくところ」という意味でStationと付けた。
というのは嘘で、元々の発想はPlayStationから来てる(いろんなソフトを取り替えて遊べるというイメージ)。
名前としては割と気に入ってるけど、rubystation.comが取られてるので別の名前を考えた方がいいかも(突然中国語の抗議メールとか来たら怖いじゃん)。
とりあえず
俺マシン以外の環境で動くようにしないとなぁ。2がt…3月中にはなんとか
2009-02-08
■ [ruby][idea] VのためのRack
Webサーバ・Webフレームワーク間をつなぐものとしてRackがあるわけだけど、 それならWebフレームワーク・テンプレートエンジン間をつなぐライブラリもあってしかるべきではないかと思った。
(Markabyのような例外を除く)たいていのテンプレートエンジンは、
v = FooEngine.new(str) v.render(:a => "hoge", :b => "moge")
のようなAPIにまとめられるはず。
■ [ruby] このgemは1.9でも使えるの?と思ったら…
それisitruby19.comで!
このgemは
- 俺のところでは動いてるよ (WORKING)
- 俺のところでは動いてないよ (FAILING)
のどちらかをみんなで投票していく仕組みらしい。
rspecが意外に動くんだなぁとか発見もあったり。
2009-02-10
■ [ruby][idea] Re: Rubyist Magazine - Ruby の歩き方
久しぶりに眺めてみた。
2年くらい前の記事なので、いろいろ古くなってるんでは?と思ったが、そんなに変わってないな。
- Mac OS Xのところに、最新版はMacPortsを使うとか書いてもいいかも。
- リファレンスマニュアルは、るりまへのリンクに置き換えたい。
- 1冊目の書籍としては、今ならノブナガ本とか「Ruby 1」もありますね。
- 網羅的な方も「プログラミング言語Ruby」が。
- 「オブジェクト指向言語Ruby - 関連書籍」のページはリンク切れですね。
関連書籍
るびまに「これまでに出たRuby本」みたいな常設記事があってもいいのかも。てかやってみたい。
るびま編集部でAmazonのアフィリエイト口座を作るとかは、やらないのかな?
今はkazuhiko-22(Hikiのamazonプラグインのデフォルトですね)になってるみたいだけど。
Refe2
gem install refe2とかでインストールできると良いのかも。
プロジェクト名はrurema.rubyforge.orgになるんだろうか。
■ [biwascheme] FirebugオンにするとBiwaSchemeが動かなくて俺涙目
なんか気づいたらFirefoxでBiwaSchemeが動かないんです。Hello Worldすら。
「気づいたら」っていうのがイヤなところで、要するにコードは変えてないのにいきなり動かなくなったわけで、 環境の変化を疑ってみたらどうもFirebugをオフにすると動くらしい。
#「リリースビルドだと動かない」みたいなネタは聞いたことあるが、「デバッグツール入れると動かない」っていうのはひどい
どこが動かないのか
BiwaScheme(のHello Worldアプリ)では、*.jsのロード完了を待つのと、Schemeのソースコードを取得するために以下の手法を利用させてもらっている。
が、Firebugがオンだと
e is null > if(e.nodeName.toLowerCase() == 'script') return e;
のようなエラーになってしまう。
環境
Mac OS Leopard+Firefox 3.0.6+Firebug 1.3.2です。
どうやって解決しよう
- 案A: Firebugをダウングレードする
- 直るかは不明
- 案B: 上記サイトの Element.recursivelyCollect(document, 'lastChild').last() を試す
- 動くかは不明
- 案C: 上記サイトでリンクされてた http://q.hatena.ne.jp/1164896677 を試す
- 動くかは不明
「デバッグする」っていう案はないのか<俺
追記
「逆に考えるんだ…『いっそバージョンアップしたらどうか』と考えるんだ」
→Firebug 1.4 Alphaに上げたら直った。
(3/21追記: 1.4.0a13.xpi ではまた動かなくなりました…(´・ω・`) 1.4.0a12.xpiなら大丈夫です。)
2009-02-12
■ [ruby] 1.8.7は(海外で)なぜ不人気なのか
ruby-talkでアンチ1.8.7スレが立ってると聞いたので斜め読みしてみた。
- 「1.8.6で動いてたコードが、1.8.7で動かないことがあったから」が主な理由っぽいなぁ。安定版なのに、気軽にバージョンアップできないじゃんっていう。
- 「バックポートなんていらね」という意見もある。「新しい機能が使いたければ1.9使うよ」ということらしい。(個人的には、「1.8のまま」新しい機能が使える1.8.7は好きなんだけどね)
- 「仕様が異なる」バージョンがいくつもあることはプログラマを混乱させる。
- 「1.8系が1.9に近くなったら、1.9に移行しなくてもいいやってならね?」(→これは逆だよなぁ。)
- 「初心者としては、違うバージョンがいくつもあると混乱する。1.8.6がピッケル本相当で、1.9.1がdblackの新しい本相当だよね?」
- 「1.8.7も*だいたい*ピッケル本相当だよ」じゃダメかなぁ。説得するには弱いだろうな。
- 「とにかくAPIの変更は1.9でやってくれ。」
- APIを変更しない修正だけならpatchlevelで済むはずなんで、これはつまり1.8.8は不要ということだろうか。
- Nutterさん曰く:
- I am not happy.
- 1.8.7、1.8.8は1.9への橋渡しを意図しているみたいだけど、TEENYレベルの変更にしては大きいものが入りすぎてると思う。
- ちょうどPython 3.0に対する2.6, 2.7みたいだけど、これらはMINORレベルの変更だし、コミュニティの要望があったものしか入っていない。1.8系には、コミュニティが望んでないものも入っている。
- TEENYレベルのバージョンアップはバグフィックス以外を入れるべきじゃない(例:全く新しいAPIや、新しい文法)。1.8.7は前者、1.8.8は後者に違反している。
- やっぱ1.9は「2.0」にすべきだったんじゃね?そしたら1.8.7を「1.9」に、1.8.8を「1.10」にできるよ。
- TEENYレベルの変更は、ユーザが「必ず」アップグレードしていいものに限るべきだ。例えば今Ubuntu入れると1.8.7が入るから、Ubuntuユーザは「1.8.6で動かないコード」を書きがちになるだろう。
- あと、バージョンがいくつもあるとそれだけ人的リソースを食うよね。1.8.8が出て、1.8.6のサポートが終わると困らん?
- <卜部さん> 俺以外が手を挙げれば、1.8.6のサポートを続けることは可能だよ。実作業もそんなに大変じゃないし(どっちかというと「何を入れるか」を決める方が大変)。
- 大抵のもんは1.8.7でもちゃんと動いてる気がするんだが?
- Object#tapとか、1.8.7でしか動かないよな?
- むしろ1.8.7だと*ちゃんと*動かないコードの方が困る。いくつかのフレームワークとかgemでそういうのあったよね。
- Date.parseの変更が自分にはよく分からん…。
- むしろ1.8.7だと*ちゃんと*動かないコードの方が困る。いくつかのフレームワークとかgemでそういうのあったよね。
- Rails。あと、SWIGベースなやつ(wxRubyとか)。でも、1.8.7で書いたコードが1.8.6で動く保証がないのが困るな。
- <Matz> Railsの件は知ってる(もう直ったよね)けど、SWIGとwxRubyについてkwsk
- 「require 'compat-1.9' したら新しいAPIが使えるよ」とかがいいんじゃないかなぁ…。
- Object#tapとか、1.8.7でしか動かないよな?
- TEENYの変化でメソッドが増えるとか、「1.8ではよくあること」だったろ?なんで1.8.7だけこんなに問題になるのか分からん。
- いや、俺は1.8.6に上げたときも「ぎゃっ」て言ったよ。
- 1.8.7でハッシュの順序が「ソースに書いた順」じゃなくなったから、俺のライブラリが動かなくなった。まあ明示的な仕様ではなかったけどさ…。
- 問題は「1.8.6のコードがちゃんと動くか」だ。個人的にはメソッドの追加は何も気にしない。/ つーか、さっさと1.9.1に移行すればいいよ!
- 俺もそう思う > 1.9.1。でも、俺は古いRailsアプリとか、でかいRSpecのテストとかを保守してる人じゃないからな…。
- 「1.8.6互換のバージョン」と「1.9.1」の2つだけでいいよ。たくさんのバージョンにいちいち対応するのは面倒だし、全部で動くようにするのをミスりそうで怖い。(railsとかmerbのアプリ書いてる人はもっとそうだろうね。)
- もう戻るには遅すぎると思うけど、「1.8.7が無かったら」という意味では賛成+1。「この機能は1.8で使えたっけ」っていう話題が大変なんだ。管理者的には、誰かのアプリやライブラリが壊れたら…と思うとアップグレードするのに勇気がいるし。
- 1.6→1.8のときはshimがあったなぁ。
感想: Railsが壊れたのはかなり印象を悪くしただろう。 あと、「ユーザがイメージする1.8系」と、「コミッタがイメージしている1.8系」のギャップが不幸の原因かなぁと思った、 機能追加とか互換性どうこうではなく。Nutterさんの案(MINORレベルでやれ)は核心を突いてるのかも。
後半 (1.8.7大好きスレッド) のまとめはまた今度。
2009-02-17
■ [misc] 研究者という仕事
(工学系の)研究者の仕事は「作れるかどうかわからないもの」を作ろうとすることだ。
僕が新しい何かを思いつくときはたいてい「どう作るか」もセットになっていて、そのせいか 「たぶん作れそうなもの」までしか発想することができない。
博士課程に進まなかったのは、これが理由の一つだったりする。
■ [ruby] gemのドキュメントをブラウザで一括検索できるようにするソフトウェア、croc
ちょっと前のruby-talkより。
gemでライブラリをインストールするとライブラリのドキュメント(rdoc)も一緒にインストールされるんだけど、 rdocコマンドってあまり使われてない印象がありますね。*1
crocはそんな報われないrdocを、ブラウザから一覧できるようにするソフトウェアです。
使い方
sudo gem install croc
とすると、「rdocがあるのにインストールされてないライブラリがあるけど、インストールするか?」 「Rubyの標準ライブラリのrdoc(英語)をインストールするか?」 みたいなことを聞かれるので、好みに応じて答える (分からなければYでいいと思う)。
しばらく待つと ~/.croc 以下にHTMLファイルができるので、~/.croc/index.htmlをブラウザで開く。
↓こんな感じで、インクリメンタル検索できます。
*1 人によっては、gem install --no-rdoc --no-ri とかしてたり…。
2009-02-18
■ [scheme] 関数のaliasをつくりたい
Rubyでいうと「 alias foo bar」みたいなことがしたくてですね。
よーしパパdefine-syntaxで頑張っちゃうぞ!
(define-syntax define-synonym (syntax-rules () ((_ new old) (define-syntax new (syntax-rules () ((new . args) (old . args))))))) (define-synonym foo bar)
と、ここまで書いたところで、単に
(define foo bar)
でいいことに気づいた。
syntax-rulesの無駄遣いwww
□ ひらい [たしか、以前に (define alias define) とかゆーネタをかましてた人たちがタイムインターメディ..]
2009-02-19
■ [ruby] 1.8と1.9を共存させる方法
Linuxなら
sudo aptitude install ruby1.8 sudo aptitude install ruby1.9
Mac OS Xなら
sudo port install ruby sudo port install ruby19
ーーーーー終了ーーーーーー
…と言いたいところだがaptのruby1.9はよく見たらまだ1.9.0だし(いずれ1.9.1になると思うけど)、せっかくだから自前でコンパイルする方法を ここでは紹介する。
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.bz2 $ tar xvf ruby-1.9.1-p0.tar.bz2 $ cd ruby-1.9.1-p0 $ ./configure --prefix=/home/yhara/bin/rubys/ruby-1.9.1-p0/(のような、どこか好きなところ) --program-suffix=-1.9.1-p0 (のような、好きな接尾辞) $ make # make install
のような感じです。
--program-suffixがポイントで、これを付けておくとインストールされるコマンドの名前が「ruby」や「gem」などの代わりに、 「ruby-1.9.1-p0」「gem-1.9.1-p0」などの名前になるので、あとはインストール先のbin/以下にパスを通せば1.8と1.9が共存する環境のできあがり。
■ [scheme] SchemeでAObench
AO benchという、レンダリングのベンチマークをGaucheで動かしてみました。 .mjtさんのypsilon版の、Gaucheへの移植です。
(3/5追記:模範解答キター!26秒とかwww)
元のypsilon版が523秒で、とりあえず動くようにしたバージョンが946秒で、そこからベクタ関係の関数がgauche.uvectorのにマクロ展開されるように したりなどして307秒になった。
まあRubyより速くて、Pythonより遅いかんじで、そんなもんかなと。
つーかCommon Lisp版が34秒とかwwwはええよwww
なんか超えられない壁を感じました。あとProcessingも速い。
ソース
Gauche専用です。
aoの方は.mjtさんのやつをちょっといじっただけです。
ptの方は.mjtさんのやつを見ながらスクラッチで移植しました(一気に書いたら3箇所間違えててデバッグにすげー苦労した)。 30分とか45分とかかかります。注意。
高速化とか
もっと速くなんねーかなー。いや、なるだろ、俺のScheme力的に考えて。
とりあえず
gosh -p time hoge.scm
でプロファイルがとれることは分かった。 が、f64vector-refが一番多いよと言われても「ですよねー」としか (yharaさんはパフォーマンスチューニングに関しては全くの素人です)
vcross(ベクトルの外積) をf64vector-* で書き直せたら効果がありそうなんだが。
(define (vcross a b) (vec (- (* (vy a) (vz b)) (* (vy b) (vz a))) (- (* (vz a) (vx b)) (* (vz b) (vx a))) (- (* (vx a) (vy b)) (* (vx b) (vy a)))))
あとはクラスを使わないとかになるのかなぁ。
追記
「インクリメンタルサーチ対応 Gauche ユーザリファレンス」は神
□ ay [ruby1.9_1.9.1.0-1はupload済みなのですが、パッケージ構成の関係で一週間ばかり待ち状態です。(u..]
2009-02-28
■ [event] Shibuya.lisp TT#2
行ってきました。
イベントに出るならなんか発表しないと勿体ない気分になるので(笑)、LTに応募してみた。 *1 あんまり自信のあるネタでもなかったし(応募時はまだ実験も始めてなかった)、なんかトリになってるし*2、和田先生はいらっしゃるし 2月は緊張しっぱなしでした(気が早いよ)。
実は、以前Gauche&SICP読書会でちょっと話したことがある(なので「(冬)」とした)。
Lispとタイトルに入ってるわりに関数名とかがSchemeですけど、脳内補完してください。書いてる途中でSchemeに限らない話なことに気づいてタイトルを変更したのでした。
使ったソースとか
眺めたい人はどうぞ。
動かすのは面倒なので諦めてください(おい)。
以下のソフトウェアを利用しています。
□ kouji0625 [3/1って。。。午後移動なのかな?]
□ yhara [うお、被ってるのに気づいてませんでした(><)]