Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Greenbear Diary
[go: Go Back, main page]

トップ «前10日分 追記

Greenbear Diary

2004|09|10|11|12|
2005|01|02|04|05|06|07|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|
現在、メール欄が空でないコメントを弾いています

2007-09-22

[event] 開発合宿

なんか2つ重なったのでいま合宿生活4日目です。4日間全くゲームやってないとか俺にしてはあり得ない真面目さなんだが そろそろ風邪でもひくんじゃなかろうか。

LDRとメールは見てる。nicovideoはBGMのために開いてたけど岐阜に来てから禁止されました(><)

| Bookmark:

[prog] 公開svnリポジトリ

がほしい。

なんでかっていうとやる気がなくてリリースしなかったプロジェクトも中途半端なのがダウンロードできるようになるじゃん?という 至極消極的な理由だったりしますが。中途半端でも公開しないより良いと思うんだよな。

| Bookmark:

[ruby] autotestが落ちる

/home/yhara/gems/local/lib/site_ruby/1.8/rubygems.rb:278:in `latest_partials': undefined method `[]' for nil:NilClass (NoMethodError)
       from /home/yhara/gems/local/lib/site_ruby/1.8/rubygems.rb:275:in `each'
       from /home/yhara/gems/local/lib/site_ruby/1.8/rubygems.rb:275:in `latest_partials'
       from /home/yhara/gems/local/lib/site_ruby/1.8/rubygems.rb:245:in `latest_load_paths'
       from /home/yhara/gems/local/lib/site_ruby/1.8/rubygems.rb:244:in `each'
       from /home/yhara/gems/local/lib/site_ruby/1.8/rubygems.rb:244:in `latest_load_paths'
       from /home/yhara/gems/repos/gems/ZenTest-3.6.1/lib/autotest.rb:109:in `autodiscover'
       from /home/yhara/gems/repos/gems/ZenTest-3.6.1/bin/autotest:36
       from /home/yhara/gems/repos/bin/autotest:18:in `load'
       from /home/yhara/gems/repos/bin/autotest:18

というエラーが出ていたのだが、どうもgem置き場に変なフォルダがあったかららしい。

yhara@meteor:~/ % ls ~/rubygems/ -1
ParseTree-1.7.1/
(中略)
uuidtools-1.0.1/
web_spec/          ←これ
wirble-0.1.2/

rubygems.rbを修正することで回避。

yhara@meteor:~/rubygems/ZenTest-3.6.1/lib/autotest % diff -c ~/tmp/orig ~/gems/local/lib/site_ruby/1.8/rubygems.rb
*** /home/yhara/tmp/orig        2007-09-22 17:40:26.000000000 +0900
--- /home/yhara/gems/local/lib/site_ruby/1.8/rubygems.rb        2007-09-22 17:32:14.000000000 +0900
***************
*** 275,280 ****
--- 275,281 ----
        all_partials(gemdir).each do |gp|
          base = File.basename(gp)
          matches = /(.*)-((\d+\.)*\d+)/.match(base)
+         next if matches.nil? #こんなんでいいのかな
          name, version = [matches[1], matches[2]]
          ver = Gem::Version.new(version)
          if latest[name].nil? || ver > latest[name][0]
| Bookmark:

[ruby] RSpec + autotest

名づけてautospec。

検索してもRails環境でのやり方しか出てこないので調べてみた。

前提知識

RSpec
テストツール。Test::Unitを人間に読みやすくしたような感じ
autotest
ファイルをセーブした瞬間に自動でテストを走らせてくれるツール。ZenTestというツール群に同梱。デフォルトでは、Ruby標準添付のTest::Unitを使う

autotestを使う場合、

./bin/hoge
./lib/hoge.rb
./lib/Hoge/*.rb
./spec/*.rb

みたいな構成にしなければならない。

インストール

gem install rspec
gem install ZenTest

設定

最近のRSpecにはautotest用の設定が内蔵されている…のだが、RSpecをgemで入れると specコマンドをうまく見つけられず

/home/yhara/gems/repos/gems/rspec-1.0.8/lib/autotest/rspec.rb:80:in `spec_command': No spec command could be found! (RspecCommandError)

というエラーになるというバグがある(RSpec 1.0.8現在)。

解決策

  • ./bin/spec を rspec-1.0.8/bin/spec へのsymlinkにする
  • rspec-1.0.8/lib/autotest/rspec.rb に一行足す

など。

  def spec_commands
    [
      File.join('bin', 'spec'),
      File.join(Config::CONFIG['bindir'], 'spec'),                             #←ここに「,」を足して
      File.expand_path(File.join(File.dirname(__FILE__), "/../../bin/spec")),  #←ここに一行足す
    ]
  end

end

まとめ

とまあほんのちょっとだけ面倒なんですけど、入れた分のメリットは十分あると思うのでRSpec使ってる人は是非。

おまけ

./spec/spec.opts に -c って書いておくと出力に色が付くよ。 (←他の方法はないのかな…)

| Bookmark:

[ruby][screen] Autotest::Screenを導入してみた

autotestついでに、テスト結果がGNU Screenの右下に出る設定を導入してみた。

わるいとき

画像の説明

いいとき

画像の説明

設定は角谷さんのをほぼそのままお借りしました。ありがとうございます。

変更点:

  • screenのパスを設定した
  • returnをnextに変更した(ブロック内でreturnってできないですよね?)
require 'autotest/screen'

Autotest::HOOKS.delete(:interrupt) #これがないと、autotestが^Cで止まらなくなります(なりました)
Autotest::Screen.statusline = "kmc | %w | %0` %u %= %m/%d %D %c"
Autotest::Screen.screen_cmd = '/home/yhara/bin/screen/bin/screen'

class Autotest::Screen
  SCREEN_COLOR[:green] = 'gw'
  SCREEN_COLOR[:yellow] = 'yk'

  Autotest.add_hook :run_command do |at|
    message 'Running' if execute?
  end

  Autotest.add_hook :quit do |at|
    clear if execute?
  end

  Autotest.add_hook :ran_command do |at|
    next unless execute?
    results = [at.results].flatten.join("\n")
    output = results.slice(/(\d+)\sexamples?,\s*(\d+)\s.*failures?(?:,\s*(\d+)\s.*pendings?)?/)
    if output
      ex,fail,pend = $~.captures.map {|e| e.to_i}
      if 0 < fail
        message "FAIL #{ex}ex, F:#{fail} ", :red
      elsif 0 < pend
        message "Pend #{ex}ex, F:#{fail} P:#{pend}", :yellow
      else
        message "All Green #{ex}ex", :green
      end
    end
  end
end
# vim:set ft=ruby:
| Bookmark:

[ruby][rspec] Specファイルの正しい書き方は?

ナマケログ - RSpecを日本語の仕様っぽくするには がすごく面白かったです。

'Teacher when introduce himself should tell his own name' 
   ↓
'Teacher 先生が自己紹介をするケース 自分の名前を言う' 
   ↓
'Teacher 先生が自己紹介をするという状況では 先生は自分の名前を言うんだ'
   ↓
'Teacher が自己紹介をするとき は、自分の名前を言うこと'

こういうのを文芸的プログラミングと呼ぶのでしょうか(多分違います)

さて、僕はといえば、「メソッドごとにテストケース作るならこれでよくね?」という結論に達しました。

describe "CharMap" do
  it ".new" do
    ...
  end
  it "#[]" do
    ...
  end
  it "#each_char" do
    ...
  end
end

…RSpec作者の方に絶望されそうです。

| Bookmark:

2007-09-19

[scheme] func, proc, pred, thunk

    表記 引数       返り値

手続き PROC 1 個以上     なんでも

述語  PRED 1 個以上が多い? 真偽値

サンク THUNK 0 個       なんでも

[http://practical-scheme.net/wiliki/wiliki2.cgi?Scheme%3a%e5%88%9d%e5%bf%83%e8%80%85%e3%81%ae%e8%b3%aa%e5%95%8f%e7%ae%b1%3alog00#H-1a5fnraより引用]

funcは"関数"だから戻り値に意味があるもの、procは"手続き"だから戻り値に意味がないもの、と思い込んでたんだが、 そうでもないのね。

| Bookmark:

2007-09-14

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

無事帰宅しましたですよ。

とりあえずの小ラーメンを完食できる程度には健康になった。

| Bookmark:

[scheme] Schemeゴルフ

リハビリがてらにゴルフ。

共有構造 ([[#0=, #0#) を覚えた。あと文字列の補間(#`"hoge ,var moge") が便利。Gauche限定だけど。

| Bookmark:

[javascript][vim] OOP javascript indentation : This indentation script for OOP javascript (especially for EXTJS)

var Hoge = Class.create();
Hoge.prototype = {
        initialize: function(){
        },

        run: function(str){
                print(str);
        }
}

みたいのをvimでそれっぽくインデントしてくれるやつ。もっとランクが高いのもあるんだけどなんか上手く動かんかった。

| Bookmark:

[javascript] SpiderMonkey

MozillaのJavaScriptインタプリタ部分を抜き出したもの(だと思う)。Cで実装されている。

Debianだとaptで入るので便利。

インタプリタだけなので、window.*とかdocument.*みたいにブラウザ関連のものは一切使えないが、 print()とreadline()があるらしいので簡単なものなら実用的なのものが作れるかも。 あとゴルフができる

CではなくJavaで書かれたインタプリタ(rhino)も存在する模様。

| Bookmark:

[prog] anagol table修正

なんかうまく取得できなくなってたので直した。

http://mono.kmc.gr.jp/~yhara/files/anagol.html

っていうかcron用起動スクリプトの書き方が悪くてずっとエラーになっていたのだった。これはひどい。 Hpricot使ってるからRUBYLIBとかGEM_HOMEとかをexportしておかないといかんのだな。

| Bookmark:

2007-08-23

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

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

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

最後だしねぇ。

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

| Bookmark:

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が入る…みたいな案はあったそうな(実装はされず)。

| Bookmark:

[ruby] mongrelは

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

| Bookmark:

[prog] Befungeが来てる件

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

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

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

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

| Bookmark:

[hiki] Hikiを2つ増やした

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

http:../rubyscraping/

http:../netalang/

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

| Bookmark:

2007-08-09

[javascript] mootools

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

| Bookmark:

2007-08-08

[event] 関東にいました

いました。

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

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

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

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

とりあえず

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

という感じにしてみた。

| Bookmark:

[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にアクセスし、管理画面からパスワードやタイトルやテーマを設定すれば設置完了です。

| Bookmark:

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


2007-08-05

[event] 関東にいます

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

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

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

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

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

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

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

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

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

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


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!

| Bookmark:

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

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

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

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

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


2007-07-31

[prog] 50音から始まるプログラミング言語

プログラミング言語の名前を五十音順に並べてみました。びわこ開発合宿のときに作ったのを忘れてた。

聞いたことねーよ!っていうのが結構あるかと思いますが、その辺は http://99-bottles-of-beer.net/ から拝借しました。

あと「が」「ぎ」「ご」「ざ」「ず」「つ」「ぬ」「へ」「を」「ん」が埋まってないので、夏休みの自由研究で自作言語を作ろうと思ってる人はぜひ これらから始まる言語名にしてみてください。

| Bookmark:

[softs] Firemacs

firefoxをemacsキーバインドにする拡張。

C-aもC-eもC-pもC-bも使えるよ!すげえ!

C-space (Mark set)も普通に使える。


以下コメント欄より:

firevimとかもあるのかなぁ…

Vimperatorというのがあるようです(試してないですが)。

C-v でペースト出来ないことに違和感を感じて外してしまいました

確かに。設定でなんとかできないのかな。

Windows なら XKeymacs なんてのも

Windowsは窓使いの憂鬱を使ってます

| Bookmark:
本日のツッコミ(全5件) [ツッコミを入れる]

Before...

test [Windows なら XKeymacs なんてのも]

ujihisa [早速Vimperator試してみた! 結構面白そう。が…gmailと相性が非常に悪いことが発覚…]

yhara [あー確かに>gmail LDRとかともぶつかりそうだな。]


2004|09|10|11|12|
2005|01|02|04|05|06|07|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|
トップ «前10日分 追記