トップ 最新 追記

Route 477



2007-08-01

[ruby] irbを使う前にしておくべき3つ(+α)の設定

Rubyで試行錯誤しながら開発したいときにはirbを使うのが便利です。 今日はirbをさらに便利にする設定をいくつか紹介します。

ホームディレクトリ*1に .irbrc というファイルを 作り、そこに設定を書いていきます。

(1) タブ補完

# --- completion
require 'irb/completion'

メソッド名をTABキーで補完できるようになります。

例:

yhara@meteor:~ % irb
>> a = []
=> []
>> a.ind[TAB]
a.index    a.indexes  a.indices

(2) リファレンス検索

IRB上から「r」というメソッドでrefeを引けるようになります。

例:

>> r :partition
Enumerable#partition
--- partition {|item| ... }    ruby 1.7 feature

    各要素に対してブロックを評価した値が真であった要素からなる配列と
    偽であった要素からなる配列からなる配列を返します。

      [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0].partition { |i| i % 3 == 0 }
       #=> [[9, 6, 3, 0], [10, 8, 7, 5, 4, 2, 1]]

=> nil
>> r :inspect
Iconv::Failure#inspect Included#inspect Method#inspect
Object#inspect OptionParser::ParseError#inspect
Syslog#inspect TMail::Mail#inspect
=> nil

クラスを指定したいときは「r "Array#inspect"」とか、「Array.r :inspect」のようにします。

(3)結果の色付け

wirbleというgemをインストールするとirbの実行結果に色が付くようになります。

# --- wirble
require 'rubygems'
require 'wirble'
Wirble.init
Wirble.colorize

(おまけ)長すぎる出力を切り詰める

File.readなど、巨大なStringを返すメソッドを呼ぶと、IRBの出力がやたら長くなってちょっと鬱陶しいですよね。 こんな時に、出力の先頭以外を省略する設定を考えてみました。

なお実装の都合上Wirbleを先にロードしておかなければいけません。 *2

# --- truncate long output (load wirble first!)
module IRB
  class Irb
    CUT = 1000
    def output_value
      if @context.inspect?
        s = @context.last_value.inspect
        if s.size > CUT
          s = s.slice!(0, CUT) + "...(snipped)"
        end
        printf @context.return_format, Wirble::Colorize.colorize(s)
      else
        printf @context.return_format, @context.last_value
      end
    end
  end
end

(おまけ2) irb中でもlsを使えるようにする

手が空くとついlsを打ってしまうあなたにお薦めです(笑)。

def ls
  print `ls -CF`
end

オプションはお好みで。

ついでにcdも実装……とかやってるとirbshになってしまいそうなので 今回はこの辺で。

Enjoy irbing!

*1 ruby -e 'p ENV["HOME"]'で出てくるディレクトリ

*2 返り値の出力をいじりたい→Irb#output_valueを変更すればいいんじゃね?→できた!!→あれ色が付かなくなったよ?→Wirbleよお前もか→いまここ

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

masa.edw [LL魂の会場でちらっとお話した、Wirbleの履歴の保存の話です。 http://d.hatena.ne.jp/ma..]

yhara [> 履歴の保存 どうもです。ちょっと手元でも試してみます。]


2007-08-05

[event] 関東にいます

サプライズwが終了したので書いてしまいますが。

というスケジュールです(でした)。

今回は(ついに)名刺を作ったので、いろんな人に配りまくりですよ。残り8枚なのでほしい方はお早めに(?)。 LL Spiritでshinhさんにぜひ渡したい!と思ったんだけど人多すぎて探すどころでなかった。ウォーリーもびっくり。

xtalよりxbyakよりまず「神保町」が読めないと思うんですよ。

http://karetta.jp/article/blog/ll-spirit/110939

会場から魂もらいました。やる気でた。このやる気は大事にしないと。

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

shinh [なんといらしてたんですね。それはもったいなさすぎるので今日(月曜)か明日なりの晩とかにもしお時間あったりすれば適当に..]

yhara [おお、ありがとうございます! 火曜は16:30までは東京駅付近にいるのですが、そこから最終の新幹線(21時台)までは..]

shinh [昨日は良い子ですやすやでした。18:00なり18:30くらいにアキバとかだとどうでしょう。とりあえず連絡先は 070..]


2007-08-08

[event] 関東にいました

いました。

  • 未踏の発表会でかなりエネルギーを貰ってしまった。やっぱりコード書きまくってる人はカッコいいと思うし自分もそうなりたい。
  • ブログに変なことを書いたらshinhさんから飲みに誘ってもらった。何でも書いてみるもんですな。ありがとうございました。
  • という効果を考えると事前に「LL魂行きます」とか書いといた方が良かったかな。考えてみればあの会場に相当数の「ブログ読んでるけど会ったことない人」が含まれてたはずだし
  • と思いつつやっぱりネタを優先してしまう俺なのでした

[hiki] 野良プラグインの管理

hikiは(tDiaryのように)複数のプラグインディレクトリを指定できるようにはなってないのかな?

みんな野良プラグインの管理とかどうしてるんだろう…。バージョン上がるたびにいっこずつコピー?

とりあえず

  • misc/plugin/ を ~/bin/hiki-plugin/ に移動
  • misc/plugin/ を ~/bin/hiki-plugin/ のシンボリックリンクに (ln -s)
  • 野良プラグインは ~/bin/hiki-plugin/ に突っ込む

という感じにしてみた。

[hiki] 同一サーバで複数のHikiを管理する方法

同一サーバで複数のHikiを管理する方法について書いてみる。

(1) 設置したいディレクトリごとに hiki-x.y.z.tar.gz を解凍してインストール

面倒なのでお薦めしません。

特にWebアプリは脆弱性が発見された場合に迅速にアップデートしなければならないので、各ディレクトリ毎に アップデート作業が発生するこの方法はあまり良いとは言えません。

(2) HikiFarmを設置する

HikiFarmを設置すると、http://wiki.fdiary.net/ のような感じで ユーザに自由にWikiを増やしてもらうことが可能になります。

が、HikiFarmだと

http://example.com/~hoge/hikifarm/hiki1/
http://example.com/~hoge/hikifarm/hiki2/

のようなURLになるので、ユーザを跨いだりトップレベルに複数設置することができません。

#こういうことがしたい
http://example.com/~foo/hiki1/
http://example.com/~bar/hiki2/
http://example.com/~bar/hiki3/

このような場合は、以下の方法を使えばOKです。

(3) tDiary方式

同一サーバで複数のtDiaryを運営する方法のように、 設定ファイルとプロキシCGIだけを置いて本体を共有する方法です。

基本的に http://www.namaraii.com/diary/?date=20030408#p03 を参照すればOK。

まず ~/bin/hiki/ あたりに hiki-x.y.z.tar.gz を解凍します。*1

次に、Hikiを設置したいディレクトリ毎に以下のファイルを設置します。

  • hikiconf.rb (hikiconf.sample.rbをコピーして編集)
  • .htaccess (dot.htaccessをコピー)
  • hiki.cgi (以下ような内容、chmod +xで実行権限を付加しておく)
#!/usr/bin/env ruby

master_path = '/home/hoge/bin/hiki/' #←Hikiを解凍したフォルダに合わせて設定
$LOAD_PATH.unshift(master_path)

load "#{master_path}/hiki.cgi"

あとはHikiを設置したURLにアクセスし、管理画面からパスワードやタイトルやテーマを設定すれば設置完了です。

*1 もしくはCVSからチェックアウトするのでもOK。その方がアップデートが楽でいいかも。


2007-08-09

[javascript] mootools

ついカッとなってまとめた。反省はしていない


2007-08-11

[ruby] Binding.of_callerが1.8.5から動かなくなったのは

set_trace_funcのバグが修正されたためだそうです(私信)。

つまりBinding.of_callerは存在自体がバグだったらしいw

関数を抜ける直前にフック"return"が呼ばれるべきなのに、関数を抜けた直後に呼ばれていたという。

あとCレベルで実装しようとすると() 必要な情報を常に持ってないといけなくなるので、of_callerのためにそこまですべきか…という話になるらしい。

もう少しマシな実装として、&blockみたいに適当な記号(ここでは^とする)を使って

def foo(a, b, ^bdg)
 ...

みたいに書いておくとbdgに呼び出し元のbindingが入る…みたいな案はあったそうな(実装はされず)。

[ruby] mongrelは

犬とかの「雑種」って意味らしいよ!

[prog] Befungeが来てる件

http://d.hatena.ne.jp/mayah/20070810/p1

とりあえず「カレンダーが書かれた言語」がesolang多すぎというのは突っ込むべきでしょうか(笑)。

2007年は「Befungeがブレイクした年」として(俺の)記憶に残りそうだ。

Befungeユーザ会作りたい。Befunge Users' Group = BUG か(ひどい)。

[hiki] Hikiを2つ増やした

凄く実用的なのと凄く実用的でないのと。

http:../rubyscraping/

http:../netalang/

増やしたのはいいけど中身を書く勢いが、、


2007-08-23

[misc] そういえば最近ブログ書いてないけど

まぁコミケ行ったりなんだり。

明日からしばらく旅に出ます。自転車です。わりとそんな事してる場合じゃない気もしますが 今行かないとあとで後悔しそうなので。

最後だしねぇ。

健康になって戻ってくる予定。