2008年 01月 30日

chokan

名前変えたい。なんかいいアイデアないかな

いまやってること/やりたいこと (名前がきまらなくてコミットできない)

  • プラグインシステムを改訂 (ファイル名に依存しないように)
  • オレオレ RICE をやめて Net::IRC (これもオレオレ RICE なんだけど) に
  • RSpec 書きまくる。(プラグインも)

不安だなぁ……考えが纏まらない……

citrus (かいはつこーど)

名前来まんないので、citrus というコードで開発することにした。とかいってそのままこの名前に変えるかもしれないけど…… chokan の branches になってるけどオリジナルコードを殆ど使ってないw

http://svn.coderepos.org/share/lang/ruby/chokan/branches/citrus/

プラグイン機構との一番重要なところと、起動部分はできた。テストは全部 RSpec で、rcov でカバレッジみてる。
99.4% (run の部分のテストをどう書いていいかわからないお)

プラグインのテストをどうするか悩んでる。今のところ、プラグインファイルにそのまま書けるようにしてる。

テストを書きやすい設計ってすなわち疎結合で、いいものになる気がする。


あとどうでもいいけど chokan の kan は柑橘のカンであって、cho は IRC で名前を並べたとき、cho45 と並ぶようにしたからだったと思います。

rcov 楽しい

http://lab.lowreal.net/test/citrus/ (citrus の rcov)

やばい。RSpec との組み合わせが最強だなぁ。めんどくせーっておもって例外のところのテストをかかなかったりするけど、100% をめざすと書かざるをえない。

テストファーストはやってみたりやらなったり>< 慣れない

2008年 01月 29日

dnbk


ぐぐるたん

Google は順位をほんと変えまくる。翻弄される。あたるサーバによって順位ちがうのかなぁ。一日で特になにもしていなくても変動する。

SoozyCon

もっかい http://www.nicovideo.jp/watch/sm2164173 みた。

モジュール最後に 1; 1; 1; 1; がツボすぎる。作りこまれててすごいいいなぁ。


そういえば POE をみんな ぴーおーいー ってよんでてびっくりした。自分の中では ぽえ だった

個人的には言語が違うとプログラムできないような人材は要らないと思ってるんですが。

サーセンwww

Perl とか Ruby でのプログラミングは、どうにか頑張れば、できるけれど、PHP は、書いていると本当に腹が立ってきて、頑張ることができなくて、無理だ。なのでぼくは言語が変わるとプログラムができなくなる人です。

OSS

オープンソースの面白さ (便利さじゃなくて) を実感するのって、結構時間がかかる気がする。最近やっとわかってきたかもしれない。

2008年 01月 28日

wikiforme の (だいたい) 最小の syntax 定義と部分編集

セクション編集ができる wiki がほしいなぁとおもって wikiforme だとどうなんかなぁと思いつつ、syntax 定義をもぞもぞ書く (内部でどういう構造になってるのかよくわからないのでためしに)

HTML のセクションから、ソースのその範囲を取得できればいいのだから、トップレベルのセクションを列挙して、番号をふり (直接ふらなくてもいいけど)、それがソースではどの範囲にあたるかをとれればいい。行番号は parse した直後のやつには含まれているけど、それを保存して、構造化 HTML をはく process はないみたいなので自分で書くしかない。


とおもいながら書いていたのだけど、process で行番号がとれないことに気付いた。行番号はエラー表示のためだけにあるみたいだ (assemble.rb L42 あたり)。なおそうと思うと結構広範囲に影響しそうでやりにくい。のでとりあえずやめた。

#!/usr/bin/env ruby

require "pp"

$LOAD_PATH << "core"

require "wikiforme"

wikiforme = WikiForme.new("foobar.4me")

array =  wikiforme.parse(DATA)

params    = {}
root      = :page
root_text = "test"

pp array

p array.assemble(params, root, root_text).process(:html)

__END__
** Foobar

aaa

** Baz

bbb
# foobar.4me/foobar.rb

Format.block :page  do
	contain        :section
	module_eval do
		def process_html
			@children
		end
	end
end

Format.block :section do
	default_syntax "**"
	contain        :@contents, :@blank
	module_eval do
		def preprocess
			super
		end

		def process_html
			p self
			XML[
				:div, {:class => "section"},
					[:div, {:class => "heading"}, @text.process],
					@children
			]
		end
	end
end

Format.block :blank do
	default_syntax :blank
	group          :@blank
	module_eval do
		def process_html
			""
		end
	end
end

Format.block :paragraph do
	group          :@contents
	default_syntax :text
	module_eval do
		def process_html
			XML[:p, @text.process]
		end
	end
end

勝手にブロック引数とって DSL っぽく書けるようにした。(検索しにくくなるのであんまりファイルわけたくない。ファイルわけないとなるとインデントして定義の範囲を明確にしたい。)

Ruby. サブクラスでの定数の再定義

class Foo
	AAA   = "aaa"
	@@foo = "aaa"
	@foo  = "aaa"

	def aaa
		"aaa"
	end

	def c
		AAA
	end

	def cv
		@@foo
	end

	def iv
		self.class.instance_variable_get(:@foo)
	end

	def cg
		self.class.const_get(:AAA)
	end

	def m
		aaa
	end
end

class Bar < Foo
	AAA   = "bbb"
	@@foo = "bbb"
	@foo  = "bbb"

	def aaa
		"bbb"
	end
end

puts
p Foo.new.c  #=> "aaa"
p Bar.new.c  #=> "aaa"

puts
p Foo.new.cv #=> "bbb"
p Bar.new.cv #=> "bbb"

puts
p Foo.new.iv #=> "aaa"
p Bar.new.iv #=> "bbb"

puts
p Foo.new.cg #=> "aaa"
p Bar.new.cg #=> "bbb"

puts
p Foo.new.m  #=> "aaa"
p Bar.new.m  #=> "bbb"

なんか勘違いしてた……クラス変数はサブクラスでうわがきしてもスーパークラスに影響はないとおもってた。

RSpec

RSpec つかうときは、同じようなテストも全部コピペしてずらずら書いたほうがよみやすい (謎のデータ構造がならぶよりはコピペのほうがマシ)

ustream

フォントサイズ 33 でやっとよめる……(全画面にしたターミナルをきりぬいて)