2008年 01月 06日

昔の日記

なんか技術系のほうの昔の日記のほうが読めないなぁw なんでこんなひどいこと書いてるんだろうって感じで目を背けたくなる……

2008年 01月 05日

svn2cl memo

svn2cl.sh --break-before-msg=2 --group-by-day  --include-rev --separate-daylogs 

が、コミットメッセージに入れているファイル名とかがうざいので

Index: svn2cl.xsl
===================================================================
--- svn2cl.xsl	(リビジョン 979)
+++ svn2cl.xsl	(作業コピー)
@@ -200,9 +200,18 @@
      </xsl:call-template>
     </xsl:when>
    </xsl:choose>
-   <xsl:call-template name="trim-newln">
-    <xsl:with-param name="txt" select="msg" />
-   </xsl:call-template>
+   <xsl:choose>
+    <xsl:when test="contains(msg, ':')">
+     <xsl:call-template name="trim-newln">
+      <xsl:with-param name="txt" select="substring-after(msg, ':')" />
+     </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+     <xsl:call-template name="trim-newln">
+      <xsl:with-param name="txt" select="msg" />
+     </xsl:call-template>
+    </xsl:otherwise>
+   </xsl:choose>
   </xsl:variable>
   <!-- add newline here if separate-daylogs is in effect -->
   <xsl:if test="$groupbyday='yes' and $separate-daylogs='yes'"><xsl:text>&newl;</xsl:text></xsl:if>

結局 svn2cl.{sh,xsl} は、dotfiles と一緒にレポジトリにいれて管理するようにしました。

Ruby で ShipIt のようなことをやる gem shipit

昨日のアイデアのまま gem にしてみました。(自動化したくなったのでとりあえず gem として使えるようにしたかった)

名前に悩んで (rake-shipit) とか、むしろオリジナルの ShipIt から離れているから名前違うほうがいいのかとか (やってることはおなじはずだけど) 考えたのだけど、名前変えるのがいろいろ面倒になった。

.shipit とか使わずに Rake のタスクにしたのは、普通 Rake でリリースタスクを書いて rake release とかでリリースしていると思うので、そのへんを変えたくなかったのと、DSL みたいなのですむならそれにこしたことないなぁと思ったからです。

今のところかなりオレオレ専用な部分が多いので (cutagem つかえばいいとおもうよ!)、使いながらなおしたい。

Rake::ShipitTask.new do |s|
	s.Step.new {
		system("svn", "up")
	}.and {}
	s.Ask
	s.Task :rubyforge
	s.Step.new {
		raise "svn2cl.sh is not found" unless system("svn2cl.sh", "--version")
	}.and {
		system("svn2cl.sh --break-before-msg=2 --group-by-day  --include-rev --separate-daylogs")
	}
	s.ChangeVersion __FILE__, "VERS"
	s.Commit
	s.Task :clean, :package
	s.RubyForge
	s.Tag
	s.Twitter
end

ちゃっちゃと gem にするだけしとこう、とか思って作業をはじめたのだけど、結局いろいろデバッグしたりする必要があった……

gem spec に指定する version をうまく更新できなくて、実はまったくうまくいってないみたいだ (たまたま最初の二回うまくいっただけ……)
ChangeVersion と Rakefile がかなり相性悪い…… (内部でやってるから)

さらに GemPackageTask が spec をたんにわたすわけじゃなくて version を (コピーとして) わたすからどうにもできない……
ChangeVersion が走ったら rakefile よみなおす、みたいなことしないとだめだ……

Rake タスクを実行するとき rake コマンドを叩きなおすようにした (いままでは invoke で内部実行してた)。
ひどすぎるバグだったのでリリースした (リリースするのたのしくなるけど、一日何回もリリースするのってアレですよね……)

2008年 01月 04日

Rakefile で shipit ぽいの

require "shipit"

Rake::ShipitTask.new do |s|
	s.Ask
	s.Step.new {
		puts "prepare phase"
	}.and {
		puts "run phase"
	}
	s.Twitter "Notice to twitter"
end

Rake::ShipitTask.new do |s|
	s.Ask
	s.Task :test
	s.ChangeVersion
	s.Commit
	s.Task :clean, :package
	s.RubyForge
	s.Step.new {

	}.and {
	}
	s.Twitter
end

みたいに書けるやつは書いてみた ( http://coderepos.org/share/browser/lang/ruby/misc/shipit.rb )。gem にするか悩む

Rakefile つかう場合、基本的にはタスクをつくって、依存関係まとめて、だけでも問題ないんだけど、それだと途中で例外が発生したときに哀しいことになりやすいので、準備のフェーズと実行のフェーズ (外部への副作用がある処理) を分離するようにしてみた (もちろん完全に例外が発生しないようにはできない)。例えば twitter や rubyforge のアカウント設定が正しいか、とかを準備の段階でチェックしておけば、バージョン変更してコミットするまえにわかるので、別の環境で「アカウント設定しわすれてたー」「あーこっちもー」みたいなのはなくなる。


s. かくのがめんどいけど (instance_eval つかっても先頭が大文字なので定数あつかいになる)、 Rakefile は普通コピペでつくるので (cutagem とか new なんとかとか)、多少冗長でもいいし、リリースの順序なんて一回かいたらそんなに更新しないので、ちょっとめんどうくさい、ぐらいならいいかなぁ。

もっと簡単に

namespace :shipit do
	task :twitter do
	end

	task :twitter_prepare do
	end
end

みたいにして、命名規則で依存関係を自動でつくる、みたいなののほうがいいかなぁ……

あーだめだ。これだと引数をわたしにくい……

コピペビリティ重要 (処理がまとまっている)

2008年 01月 03日

Gyazo みたいにスクリーンショットを即 fotolife にアップロードするやつ

http://subtech.g.hatena.ne.jp/antipop/20071121/1195652375 を Ruby + Pit + atomutil とかで書いてみました。

最初は Perl のままアカウント情報のところだけ pit つかうようにしようと思ったのだけど、Pit もづーるがほしくなったりして、つくるなら Perl かかないととかいろいろ考えてたら Ruby で書いてしまっていた。

Shibuya.jpg

おつかれさまでした巫女さんが可愛いくて本当によかったですね。


50 mm f/2.2 0.003 sec (1/400) ISO200


50 mm f/2.8 0.003 sec (1/400) ISO200


50 mm f/3.2 0.001 sec (1/1600) ISO200


50 mm f/2.8 0.006 sec (1/160) ISO200


50 mm f/7.1 0.02 sec (1/50) ISO320


女の子みたいな現像 (謎) をしなかったやつ

今日の写美は作者の人が作品の説明をしていたのがおもしろかった (何がおもしろいのかわからない写真だったから、すこし世界観がひろがった気分)。

self portrait

Me

キモ☆ヲタ