トップ 最新 追記

Route 477



2008-06-01

[perl] Moose

要するにDSLによって言語仕様を拡張する試みだと思えばおk?

型指定のところにMaybe[`a]とか入っててワロタwwww

いや、笑ってる場合じゃない。Perl使いはオプショナルな型付けを手に入れたってことだよな。 まあ、あくまで実行時の型チェックであって、コンパイル時に型エラーとか表示してくれるわけではなさそうだけど。 (…とは書いてみたが、いつの間にかPerl黒魔術でコンパイル時チェックが実装されたりしそうで怖いw)

本日のツッコミ(全2件) [ツッコミを入れる]

hakobe [また聞きなので正確にはわからないのですが,コンパイルフェーズである程度型チェックされるらしいですよ.]

yhara [mjd! 期待を裏切りませんね。]


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と被ってるっぽいんだけど…。

みんなどうしてるんだろう。

本日のツッコミ(全1件) [ツッコミを入れる]

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

[haskell] ghcをインストールするのにghcが必要な件

MacPortsで入れるときとかどうしてんだろ?と思ったら:

Attempting to fetch ghc-6.8.2-darwin-i386-leopard-bootstrap.tar.bz2

bootstrap部分だけバイナリ配布してるのな。

…それもう本体もバイナリ配布でよくね?w

[haskell][SDL][mac] MacでもHSDLで遊びたいんだが

MacPortsでghcを入れて*1id:ku-ma-meさんの記事を 参考にコンパイルしてみたんだけど。

バイナリを実行した瞬間に、「Ruby/SDLゲームをrsdlじゃないrubyで動かしたときのエラー」と同じやつが表示されて落ちた。 ああ。Mac用SDLの初期化処理が実行されないからか…。

rsdlをビルドするのは(ほぼ)Rubyを再コンパイルするだけの簡単なお仕事なんだけど、ghcはコンパイラだからなぁ…。何とかなるのかこれ。

*1 コンパイルにやたら時間かかるので注意


2008-06-17

[ruby][web] Yahoo!かな漢字変換Webサービスの素敵な使い方

これは和む(笑)

ビフォー

20080604020218.jpg

アフター

20080604020217.jpg

[perl] Re: Perl 言語自身すら拡張する Filter 機能をお勉強 :: Drk7jp

Perlのソースフィルタ機能について。前から気になってはいたんですが、日本語の資料が見つからなかった覚えがあるのですごく有難いです。

要するに「文字列ベースのマクロ」なんだなぁ。いやリーダマクロも兼ねてるか。

文字列リテラルだけフィルタかけたりできるのは知りませんでした。

[ruby] Ramazeで簡単なアプリを作ってみようと思ったら、日本のRamazeユーザのためのハブサイトを作っていた

何を言ってるかわからねーと思うが(ry

どうぞご利用ください。

[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-18

[ruby] RejectKaigi

RubyKaigi2008までもうすぐですが(今週末)、今年もRejectkaigiってあるのかな?

本日のツッコミ(全3件) [ツッコミを入れる]

no6v [つ [ruby-list:45061]]

かくたに [エントリーお待ちしております!!]

yhara [no6vさん、かくたにさん: ありがとうございます。べ、別に、エントリーしたくて聞いたわけじゃないんだからねっ!]


2008-06-19

[lisp][vim] Lispプログラムの括弧を虹色で表示する

.vimrcに

let lisp_rainbow = 1

と書いておく。

この状態でLispプログラムを開いて、「:set ft=lisp」とすると、画面がこんなふうにw

綺麗ですねぇ。

コンソール版vimだと5色くらいしか出ないので、gvimでやるのがおすすめ(10色くらいになります)。



2008-06-21

[kmc][event] 0x20周年

KMCが今年でちょうど32周年ということで、京大会館にて0x20周年記念パーティーが行われた。 だいぶ前から準備が行われていたので、まずは無事に終わって良かった。発表者の方々ありがとうございました。関係者の方々はお疲れ様でした。

内容はいろんな業界の先輩方に話をしていただくという感じで(あと現役からも少し)ここには書けないようなこととかいろいろ(笑)。

てかこんな店があったなんて…いつか行かねば。


2008-06-22

[ruby][event] RubyKaigi2008

持っていき忘れたもの

  • 歯ブラシ
  • 十分な所持金 (あと3000円くらい足りなかった)
  • ICOCA, SUICA (勢いでPASMO買っちゃったよ)
  • ゆうちょのキャッシュカード (地方銀行は引き落とせる場所が少ない)

RejectKaigi終了後、だんさん星一さんとちょっと話した。 Rubyでゲーム用ライブラリ作ってる人はたくさんいるけど、みんなけっこう独立して作業してるよね、という。

「Rubyでゲームを作りたい人のためのハブサイト」があればいいのかな。もしくは投稿サイトのような。

こういうことがあるからイベントはいい。


夜、カレー屋で「ちょうどいいサンプルを見つけたのでCに乗り換えた」という悲しい話を聞いたり。サンプル重要。

本日のツッコミ(全2件) [ツッコミを入れる]

星一 [サンプル重要ですね。 Java ですが、こういうサイトがあるととてもいいんじゃないかなと思ったりしました: http..]

yhara [おー、いいですね。 投稿サイトの方は tonyuとかをイメージしてました。 http://tonyu.jp/pro..]


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だった。

普通の英会話は全然できないけど、技術的な話ならなんとなく言ってることがわかる(気がする)ので素晴らしいですね。

リンク

本日のツッコミ(全3件) [ツッコミを入れる]

walf443 [その設定はrubyforgeの設定ができてないときに出るもののような気がします。コマンドラインでrubyforge ..]

walf443 [> no <group_id> configured for <reposh> これのことでした。]

yhara [情報ありがとうございます。rubyforge configはやった気がするんだけど、やり忘れてたかな…。 次にge..]


2008-06-24

[ruby] トースト

たぶん、私にとってのrubyってのは単なる生活の一部になっちゃってるので、わざわざ大勢の人たちに語るようなことがないというか。

自分が毎朝トーストをどうやって焼いてるかをわざわざ聴衆の前で発表しようとか、誰も思い立たないでしょ?

[丁稚な日々より引用]

「お前は今までに書いたRubyの行数を覚えているのか?」ってやつですね、わかります。*1

しかし例えば「美味しいトーストの焼き方」なら僕は聴きたいです。

*1 僕も最近「Rubyで」プログラミングしてる、というのを意識しなくなりつつあります

[ruby][event] RejectKaigiのスライドを公開しました

RejectKaigiの発表資料を公開しました。

RubyKaigi2008は日曜の午後からの参加だったので、 なんとなく発表しないと負けな気がしてRejectKaigiに応募させてもらったのですが、デモの手順を間違えて時間切れになってしまった(><)慣れてきたと思った頃が一番危ないんですよね、分かります。

だが後悔はしていない (今まで発表して後悔したことはないよ)。

  • プレゼンのために開発が進んだ
  • 先輩に褒めてもらった:-)
  • 経験+1

しかし反省はする。

  • デモしたいときは手順を完璧に
  • 余計なウィンドウとか端末とかタブとかは事故の元
  • 焦ると「あと一分です」のアナウンスが全く聞こえなくなります

当日は時間がなかったので文字少なめなスライドにしたのですが、そのまま公開すると意味わからなくなりそうだったので加筆しています。というかこれくらい準備してから望むべきだったかも。

おまけ

空気読まない Schemer が2人いました、私と naoya_tさん

[Ruby会議がおわって - yuum3のお仕事日記より引用]

ちょっと待ってほしい、本当にそうだろうか? (スライドの右上の「★」をクリックすると……)


2008-06-30

[ruby] bladeの原先生によるRubyのcallccの使用例

あとで読む。