昔の日記
なんか技術系のほうの昔の日記のほうが読めないなぁw なんでこんなひどいこと書いてるんだろうって感じで目を背けたくなる……
なんか技術系のほうの昔の日記のほうが読めないなぁw なんでこんなひどいこと書いてるんだろうって感じで目を背けたくなる……
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 と一緒にレポジトリにいれて管理するようにしました。
昨日のアイデアのまま 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 で内部実行してた)。
ひどすぎるバグだったのでリリースした (リリースするのたのしくなるけど、一日何回もリリースするのってアレですよね……)
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
みたいにして、命名規則で依存関係を自動でつくる、みたいなののほうがいいかなぁ……
あーだめだ。これだと引数をわたしにくい……
コピペビリティ重要 (処理がまとまっている)
http://subtech.g.hatena.ne.jp/antipop/20071121/1195652375 を Ruby + Pit + atomutil とかで書いてみました。
最初は Perl のままアカウント情報のところだけ pit つかうようにしようと思ったのだけど、Pit もづーるがほしくなったりして、つくるなら Perl かかないととかいろいろ考えてたら Ruby で書いてしまっていた。
おつかれさまでした巫女さんが可愛いくて本当によかったですね。

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
女の子みたいな現像 (謎) をしなかったやつ
今日の写美は作者の人が作品の説明をしていたのがおもしろかった (何がおもしろいのかわからない写真だったから、すこし世界観がひろがった気分)。