2008-06-06
■ [linux][javascript] Ubuntu 8.04に上げたらfirefoxが3.0 beta5でfirebugがなくて涙目
という場合は、getfirebug.comからfirebug 1.2のbetaを入れるといいらしい。すげー見つけにくいところに置いてあるけど。
1.1系はfirefox2用、1.2系がfirefox3用だそうな。
…それにしても、リリース版のディストリビューションにベータ版のブラウザ採用するとかどうなんだw > Ubuntu
■ [mac][ruby] Leopardでport install rb-cocoaに失敗する
/Users/yhara % sudo port install rb-cocoa ---> Activating rb-cocoa 0.13.2_0+darwin_9 Error: Target org.macports.activate returned: Image error: /Developer/Documentation/RubyCocoa/html/ja/installation.html already exists and does not belong to a registered port. Unable to activate port rb-cocoa. Error: Status 1 encountered during processing.
なんかドキュメントのインストール先がLeopardデフォルトのRubyCocoaと被ってるっぽいんだけど…。
みんなどうしてるんだろう。
□ totugekiluna [私も同じようになりました。 なので強制インストールかけようとしたら既にインストールされている状態でした汗 インストー..]
2008-06-08
■ [scheme] Re:
「30分で初級。10分で中級。」とか書いてあると挑戦したくなりますね。
しかしやってみたら全然うまく行かなくて、Wilikiのヒントを見つつ35分。全然再帰が身についてないことが明らかになりました/(^o^)\
(define result '()) (define (tree->child-parent tree parent) (push! result (cons (car tree) parent)) (for-each (cut tree->child-parent <> (car tree)) (cdr tree))) (tree->child-parent (cdr *tree*) (car *tree)) (print result)
push! か appendが必要らしいので、push!で書いてみた。まず「木の全てのcarを列挙する関数」から始めると考えやすいと思う。
と思ったら、なんかfoldがあればpush!もappendも必要ないらしい。ほんとに?
(define (tree->child-parent2 children parent result) (fold (lambda (node result) (acons (car node) parent (tree->child-parent2 (cdr node) (car node) result))) result children)) (define (main args) (print (tree->child-parent2 (cdr *tree*) (car *tree*) '())))
おお、出来たっぽい。foldに与えた関数の中で再帰するとか、なんかキモい感じですけど(笑)。
「結果がまっすぐなリスト」なので、要素をいっこずつ付け足していけばいい、と。ここではresultというリストにaconsで要素を足していっています。
2008-06-09
■ [misc] 「やさしい仕様書」を書くために使えそうな3つのアイコン
「Joel on Software」によれば、より良いソフトウェアの仕様書を書くためには 挿絵や空白をたくさん使わないといけないのだそうだ。 なぜなら、文字でびっしり埋まった仕様書なんて誰も読みたくないし、 読まれることのない仕様書を書いたって仕方がないからだ。
というわけで、僕も「やさしい機能仕様書」を書く方法について少し考えてみた。 今日紹介したいのは仕様書をオライリー風にするという方法だ。
Joelの仕様書には、開発者、テスター、営業など様々な立場の読者のために脚注が付いているらしい。
例:
ノート:松江市の西に位置する湖、宍道湖は「しんじこ」と読む。「ししどこ」ではない。
さてここで、ノートの横にiconspediaで拾ったペンの画像を表示してみる。 どうだろう、なんとなくオライリーっぽい感じがしないか?(笑)
ノート:具体例を見たい場合は、4873113482などを参照されたい。あとは489100455Xの「コーディング ホラー」アイコンなんかが僕の中に強烈な印象を残しているが、しかしオライリー刊じゃなかったな。
テクニカルノートには工具のアイコンを並べるとそれっぽい感じになる。
テクニカルノート:この画像はiconspediaからPNGをダウンロードし、背景を白で塗りつぶしたものだ。実際にドキュメントで使用する際は、画像の周りを黒線で囲むと良いと思われる。
あと、注意すべき内容や未解決事項には目立つアイコンを使うといい。
注意:この黄色いアイコンは商用利用不可である。仕事で使う場合はもっと別のアイコンを探した方がいいとおもうよ。
それでは、良い仕様書ライフを。
2008-06-11
■ [lisp][lab] S式ベースC言語「SC」がリリースされたようです
僕がいた研究室の先輩のプロジェクト、「SC」がリリースされたようです。
SCは、一言で言うと「S式でC言語を書くためのシステム」です。
言語処理系の研究では、JavaやC言語などの既存の言語に並列処理やGCなどのいろいろな機能を付け加えたりします。 ここで問題になるのが、「JavaやC言語の文法をいじるのは大変」ということです。例えばJavaに「このキーワードでくくった区間は並列に動作します」みたいな 文法を追加しようと思ったら、yaccとか使って頑張らないといけません。
そこでS式です。
S式はLisp系言語で使われるフォーマットで、プログラミング言語のような木構造を扱うのに特に適しています。 俺言語からC言語への変換は大変ですが、俺言語をS式ベースにしておけば、そこからSC言語に変換するのは (S式を別のS式に変換するだけなので) Lispを使って簡単にできると。 一旦SC言語に落としてしまえば、そこからC言語のコードを生成することができるので、gccとか使っていろんなプラットフォームで実験できて嬉しいと。
図で書くと
【SCがないとき】 俺言語 → C言語 (yaccとかで がんばる) 【SCがあるとき】 S式で書かれた俺言語 → S式で書かれたC言語 → C言語 (Lispプログラムで (SCが勝手に 木を変換する) やってくれる)
という感じです。
処理系の研究以外の使用方法としては、実習でC言語をやらされるのが嫌なときに、SCで書いてC言語に変換して提しゅ…いやTAが困るのでやめてください(笑)。
2008-06-12
■ [lisp] 純Lispは関数5つだけでどうやってチューリング完全になるのか?
Wikipediaの「純Lisp」の項を見ると、5つの基本関数だけでチューリング完全だよーみたいなことが書いてある。 でも実際にはcar/cdr/cons/eq/atomだけじゃ分岐も再帰もできなくね?という疑問をどっかで見て、リンクされてる論文を 見てみたりもしたけどよく分かんなかったのだけど、 id:kazu-yamamotoさん の講演資料を見てようやく分かった。
5つの関数 car cdr cons eq atom 2つの特殊形式 quote cond 関数定義の機能 lambda label (defineのこと)
要するに、condとかは特殊形式だから「5つの基本関数」には入らないと(笑)。まぁそりゃそうだけどさ。
2008-06-14
■ [mac][prog] ustreamでLiveCodingするためのメモ
先週の土曜日に、ustreamでLiveCoding(を行う練習)をしてみました。
必要なソフト
- CamTwist
- デスクトップを動画配信するのに必要。
- 画面の一部だけを配信することも可能。MacBookは横長なので、ustreamの画面比率に合わせて配信する方が見やすい動画になるだろう。
- これを起動してからustreamの配信ウィンドウを開くと、動画ソースで「CamTwist」を選べるようになる。
- SoundFlower
- Macが再生する音声を横取りするソフト。友達とskypeで喋ってるところを配信するのに必要 (今回は必要なかった)。
- インストールに再起動が必要なので注意。
- これを起動してからusteramの配信ウィンドウを開くと、音声ソースで「SoundFlower」を選べるようになる。
- LadioCast
- マイク音声をSoundFlowerに流すのに必要。
- これを起動して、出力先をSoundFlowerにする。
- 出力する音声の大きさを変えられたりする。便利。
- ターミナル
- Mac OS X 標準のターミナルでOK。
- Command-+ (日本語キーボードならCommand+Shift+「;」) を押すと文字の大きさを拡大できる。ustreamのプレビュー画面を見ながら、文字が読めるサイズまで大きくしておこう。
- ブラウザ
- お好きなものを。
- ブラウザ画面を配信するなら、これも文字を大きくしておくべき。
文字の拡大はMac OS Xの機能を使ってもいいかもですね (僕の環境だとControl+上下スクロール、システム環境設定 - キーボードとマウス - トラックパッドで設定可能)。
発端
RubyCocoaでtwitterクライアント作ってみれと言ったら本当に20分ぐらいで作ってしまった! 鉄人プログラマかっ
[Twitter / Toshiyuki Masui: RubyCocoaでtwitterクライアント作ってみ...より引用]
という発言を見て、BiwaSchemeでも20分できないかなーと思ったのでした。結果
20分のはずが60分かかりました(笑)。やっぱり、もうちょっと練習とか下準備しないとダメだなー。
まぁでも、技術的には問題ないことが分かったので良かったです。これで、思い立ったらいつでもLiveCodingすることができる(orさせられる)わけだしね。
2008-06-16
2008-06-17
■ [perl] Re: Perl 言語自身すら拡張する Filter 機能をお勉強 :: Drk7jp
Perlのソースフィルタ機能について。前から気になってはいたんですが、日本語の資料が見つからなかった覚えがあるのですごく有難いです。
要するに「文字列ベースのマクロ」なんだなぁ。いやリーダマクロも兼ねてるか。
文字列リテラルだけフィルタかけたりできるのは知りませんでした。
■ [ruby] なんかMongrelが落ちるので他のWebサーバも試してみた
起動したはずのMongrelが勝手に終了して困る。
/home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:98:in `reload!': undefined method `reset_application!' for ActionController::Dispatcher:Class (NoMethodError ) from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:95:in `synchronize' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:95:in `reload!' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:165:in `reload!' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:178:in `setup_rails_signals' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:303:in `call' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:303:in `join' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:303:in `join' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:303:in `each' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:303:in `join' from /home/yhara/gems/gems/mongrel-1.1.5/bin/mongrel_rails:137:in `run' from /home/yhara/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run' from /home/yhara/gems/gems/mongrel-1.1.5/bin/mongrel_rails:281 from /home/yhara/gems/bin/mongrel_rails:19:in `load' from /home/yhara/gems/bin/mongrel_rails:19
エラーメッセージでググっても解決法がわからなかったので、他のWebサーバも試してみることにした(←解決になってないぞ)。
Thin
インストールは簡単。g++が無かったので入れたけど。
gem install thin
しかしthin startすると落ちる。
terminate called after throwing an instance of 'std::runtime_error' what(): unable to create epoll descriptor: Function not implemented
epollはカーネル2.4系には存在しないとのこと…。(参考) 「じゃあ俺epollを使わないようにするパッチ書いたよ」と書かれてるけど、まだリリース版には当たってない模様。むう。
Ebb
インストールは簡単。apt-get install libglib2.0-devが必要。
gem install ebb
普通に動いた。
しかしebb_railsには、mongrelやthinのようにprefixを指定するオプションがない…。むう。
んでどうしたか
thinでepollを使わないようにするパッチを見たら実質一行だったので、 手で書き換えた。動くようになった。めでたし。
2008-06-22
■ [ruby][event] RubyKaigi2008
持っていき忘れたもの
- 歯ブラシ
- 十分な所持金 (あと3000円くらい足りなかった)
- ICOCA, SUICA (勢いでPASMO買っちゃったよ)
- ゆうちょのキャッシュカード (地方銀行は引き落とせる場所が少ない)
RejectKaigi終了後、だんさんと星一さんとちょっと話した。 Rubyでゲーム用ライブラリ作ってる人はたくさんいるけど、みんなけっこう独立して作業してるよね、という。
「Rubyでゲームを作りたい人のためのハブサイト」があればいいのかな。もしくは投稿サイトのような。
こういうことがあるからイベントはいい。
夜、カレー屋で「ちょうどいいサンプルを見つけたのでCに乗り換えた」という悲しい話を聞いたり。サンプル重要。
2008-06-23
■ [ruby] RTaskがうまく動かない
RTaskがとても便利そうなので使ってみたのですが:
/Users/yhara/proj/reposh % rtask -r gemify -I WARNING: RDoc will not be generated (has_rdoc == false) Successfully built RubyGem Name: reposh Version: 0.1.6 File: reposh-0.1.6.gem tar -T Manifest.txt -c -z -f reposh-0.1.6.tgz rake aborted! no <group_id> configured for <reposh> /opt/local/lib/ruby/gems/1.8/gems/rubyforge-1.0.0/lib/rubyforge.rb:394:in `lookup' (See full trace by running task with --trace)
むー。rubyforgeわからん。
■ [hiki] tDiaryのbq.rbをHikiに移植してみた
Greenbear Laboratory - ICFP contest 2007 感想リンク集 にリンク張ってもらったので久々に見てみたらbq.rbがバグってて涙目www
という感じだったのでソースを見てみた。あー、tDiaryのbq.rbのバージョンが上がって内容をサニタイズするようになった*1 からHikiで動かなくなったんだな。
以下、適当に修正してみたもの。Hikiのプラグインディレクトリにbq.rbという名前で保存してください。
def bq( src, title = nil, url = nil ) if url then result = %Q[<blockquote cite="#{url.unescapeHTML}" title="#{title.unescapeHTML}">\n] elsif title result = %Q[<blockquote title="#{title.unescapeHTML}">\n] else result = %Q[<blockquote>\n] end result << %Q[<p>#{src.unescapeHTML.gsub( /\n/, "</p>\n<p>" )}</p>\n].sub( %r[<p></p>], '' ) result << %Q[</blockquote>\n] if url then cite = %Q[<cite><a href="#{url.unescapeHTML}" title="from #{title.unescapeHTML}">#{title.unescapeHTML}</a></cite>] result << %Q[<p class="source">[from #{cite.unescapeHTML}]</p>\n] elsif title cite = %Q[<cite>#{title.unescapeHTML}</cite>] result << %Q[<p class="source">[from #{cite.unescapeHTML}]</p>\n] end result end
*1 あと「◯◯から引用」のメッセージが多言語対応したっぽい。
■ [ruby][event] jRubyのCharles Nutterとピザを食うなどした
jRuby開発者のCharles Nutter氏が島根大学での講義を行うとのことで、その夜に開催された「Charles Nutterを囲んでピザを食べる会」に参加してきました。(島根++)
以下、覚えてる話とか。
- 将棋がfavorite game
- 7才の息子さんと囲碁を打ってるとか
- 最近、Dubyという言語を作っている (Duke + Ruby)
- 一言で言うと、「オプショナルな型指定つきのRuby」らしい。最初はJVM上に実装していたが、今はC版もあるとのこと。
class Foo def fib(n) {n => java.lang.Integer::TYPE, :return => java.lang.Integer::TYPE} if (n < 2) n else fib(n - 2) + fib(n - 1) end end end
- 型指定とか
- 最近 def fib(n => :integer) みたいに、"cute"なシンタックスで書けるようにした
- 関数の返り値を指定する方法はない(?)。型推論できるから。
- 「数値も文字列も返す可能性がある」場合は単に Object と推論
- 「型付きRuby」というとRubyKaigiでも発表があったtrubyを思い出すけど、また違ったアプローチで面白いなぁ
- tRubyは安全性を、Dubyはパフォーマンスを指向しているっぽい
- GCの話
- id:authorNariのターン(笑)
- jRubyの実装で、GCについて気をつけていることはありますか?→ない。JVMに任せている
- GCは好きですか?→「うーん、とてもチャレンジングなテーマだと思うし、だからこそ自分でやらなくて済むことに感謝しているよ:-)」(みたいな)
- 確かにJVMのGCはすげーたくさんの人が研究してるしなぁ
- 開発とマーケティング
- 開発も重要だけど、それをたくさんの人に知ってもらうことも重要。
- So I'm here
- 第1回JVM言語カンファレンス
- なるものが開催されるらしいw
- jRubyから使えるJavaのライブラリで、「これはRubyではできないぞ!」ってやつとかない?
- →「Rubyではできない」っていうのはないと思うが、Javaのがより良い、っていうのはあるかもね。例えば XMLのライブラリ、POI、swingなど。
- POI は JavaからWordやExcelのドキュメントを扱うためのライブラリらしい。
感想
とても気さくな人だった。技術の話なら何時間でもできそうなかんじ。MacBook Proだった。
普通の英会話は全然できないけど、技術的な話ならなんとなく言ってることがわかる(気がする)ので素晴らしいですね。
リンク
- Headius (Nutter氏のブログ)
2008-06-24
■ [ruby] トースト
たぶん、私にとってのrubyってのは単なる生活の一部になっちゃってるので、わざわざ大勢の人たちに語るようなことがないというか。
自分が毎朝トーストをどうやって焼いてるかをわざわざ聴衆の前で発表しようとか、誰も思い立たないでしょ?
[丁稚な日々より引用]
「お前は今までに書いたRubyの行数を覚えているのか?」ってやつですね、わかります。*1
しかし例えば「美味しいトーストの焼き方」なら僕は聴きたいです。
*1 僕も最近「Rubyで」プログラミングしてる、というのを意識しなくなりつつあります
■ [ruby][event] RejectKaigiのスライドを公開しました
RejectKaigiの発表資料を公開しました。
RubyKaigi2008は日曜の午後からの参加だったので、 なんとなく発表しないと負けな気がしてRejectKaigiに応募させてもらったのですが、デモの手順を間違えて時間切れになってしまった(><)慣れてきたと思った頃が一番危ないんですよね、分かります。
だが後悔はしていない (今まで発表して後悔したことはないよ)。
- プレゼンのために開発が進んだ
- 先輩に褒めてもらった:-)
- 経験+1
しかし反省はする。
- デモしたいときは手順を完璧に
- 余計なウィンドウとか端末とかタブとかは事故の元
- 焦ると「あと一分です」のアナウンスが全く聞こえなくなります
当日は時間がなかったので文字少なめなスライドにしたのですが、そのまま公開すると意味わからなくなりそうだったので加筆しています。というかこれくらい準備してから望むべきだったかも。
おまけ
空気読まない Schemer が2人いました、私と naoya_tさん
[Ruby会議がおわって - yuum3のお仕事日記より引用]
ちょっと待ってほしい、本当にそうだろうか? (スライドの右上の「★」をクリックすると……)
□ hakobe [また聞きなので正確にはわからないのですが,コンパイルフェーズである程度型チェックされるらしいですよ.]
□ yhara [mjd! 期待を裏切りませんね。]