ConEmuで起動時にコマンドを実行する方法

クライアントPCはずっとWindowsを使ってるのですが、やっぱりrspecとか色付きで結果が出て欲しいと思ってちょっと探してみたらいい感じのエミュレーターがありました。なかなか快適です。
http://code.google.com/p/conemu-maximus5/

で、デフォルトのプロンプトを変更したいなーと思ってやってみました。
まじめにダイアログの表示を読めば判る内容ですが、めもめも。

続きを読む

CGIでちょーはまったこと。TeraPadでは、UTF-8Nで保存するべし

こないだっから突然CGIが動かなくなってちょーはまってたのですが、解決したのでメモを残しておくのです。

まず結論から。
CGIUTF-8で書く時は、TeraPadでは「UTF-8N」で保存すること。


TeraPadで「UTF-8」保存すると、ファイルの頭にBOM(Byte Order Mark)なる3byteのコードが入ってしまい、これがゆえにshebang(一行目の#〜〜/ruby)が認識されなくてInternal Server Error となるそうな。
なんか前にもはまって、その時は「いーや、EUCにしとこ」とかで逃げた気がしてます。


こちら、参考にさせて頂きました。
http://gagago.cocolog-nifty.com/blog/2009/05/shift-jis.html
http://d.hatena.ne.jp/trinity777/20091101

WikiPediaとか、RFCとかチラ見した限りでは、UTF-8 / UTF-8N の呼び方は日本独自で公式に定義されているものではないそうです。


ついでに BOMってなんなのかしらというのを調べて、ちょこっとお勉強になりました。
ビッグエンディアンとリトルエンディアンがなんであるのかも初めて知りました。後ろの桁から並べるなんて、なんでそんなややこしいことをすんのかと思ってたけど、コンピュータにとって処理しやすいという利点があるのかー。いや、今となってはあんま関係ないと思うけど、メモリとかネットワークのリソースがしょぼかった頃は効果的だったんだろうなぁ。

りゅうたま「蟹の恐怖」「初めての文通」

JGC 2009で、公式セッションでやってもらった記憶を元に、てきとーにアレンジしてGMしました。
ゴブニャガルドの郵便配達人ユータローくんを、メインNPCにすえたシナリオです。
シナリオタイトルは、1話終わる毎にプレイヤーからアイディアを募って決めたものです。

参加者

PCは3人です。
メタボ・ド・ナガグツ。6才、オス。嫁探し中のノーブル・コネコゴブリン。
バル・ス・ニコル。盗んだ子馬と飛び出した、13才の家出少年ファーマー。
フューネ。ばあちゃんが亡くなったことをきっかけに、風の向くまま気の向くまま旅に出たミンストレル。最年長15才の女の子。
竜人は、サラ・ソルジャ(蒼竜)。おしゃれと新しい物と恋バナが大好きな、アリス服の少女。竜人は特に登場させなかったけど…。

旅日誌

フューネが書いてくれた日誌です。

  • 5/4 草原/晴れ。風の向くまま3人旅。メタボが疲れてた…。町まであと1日。
  • 5/5 草原/曇りのち雨。橋の下で困っているコネコゴブリンのユータロー君と犬のハヤトビマルに会う。どうやらコンパスを落としてしまったらしい。コンパスを探してたら、偽たまご蟹に襲われた…。倒せず、逃走。
  • 5/6 町/晴れ。一旦休息。夕方にユータローが大ケガしてきた。ザザとゾゾという、嫌われ者に手紙を盗まれたらしい。手紙をとりかえしにLet's Go! …明日にね。
  • 5/7〜9 丘陵のち岩場/晴れのち曇り。何ごともなし…というか迷った…。
  • 5/11 丘陵のち町/大嵐。町に戻ってたザザとゾゾをつかまえた。

「蟹の恐怖」

ユータローくんが落としたコンパスを探してあげてる最中に、偽たまご蟹に遭遇して戦闘になった一行。
これがとっても苦戦。
1匹倒した段階で満身創痍で、コンパスを拾ってすごすごと撤退したのでした。
そんなに強敵じゃないはずなのに、おかしいなぁヽ(^^;)ノ。
メタボ「おのれ、カニめぇ…ゴブニャ。」

「初めての文通」

ゴブニャガルドでの1日目は、平和に町を楽しむ一行でしたが、その夜、傷ついたユータローが宿に倒れこんできたのです。
ユータローくんが奪われた手紙をとりかえしに、丘陵のち岩場へ挑戦する一行。

そして、旅歩きに失敗しまくる一行。
おまけにようやく辿り着いたアジトには、お留守番のマイコニドしかおらず、ザザ&ゾゾとはスレ違いになった模様。
下手くそな字で手紙を書き写した痕跡があり、どうやらザザ&ゾゾは字を練習しているのか?
疑問に思いつつも、嵐が来る前にと必死にゴブニャガルドに戻り、ザザ&ゾゾを捕らえようとする。
嵐のゴブニャガルド、様々なものが風で吹き飛ばされる中での戦闘は、一部PCに心の傷を負わせたりもしたのでした。
フューネ「な、なんで、ブタがぁ〜」

捕らえたザザ&ゾゾを問い詰めて、なにやら脱力する一行。
ザザ「手紙さえ上手に書ければ、オイラは上流階級の仲間入りは間違いないホブニャー」
ゾゾ「アニキかっこいいゴブニャー。オイラは字が読めないけど」
ユータロー「まず、手紙を出す相手はいるゴブニャ?」
そのあまりにもまっとうな正論は、ザザ&ゾゾを固まらせ、ついでに旅人3人の心にも突き刺さったのでした(3人とも、手紙を出す相手はいないからね)。
ちょっとシンパシーを感じた旅人たちは、ザザ&ゾゾを説得し、文通相手になることに決めたのでした。

反省とかとか

想定外に短く終わっちゃって、時間余りまくりだったのです。始まりも早かったけど…。
旅歩きでかなり失敗したので、予定通りの天候変化だと難易度上がりすぎかなーって迷ったです。
それに気をとられて、演出が足りないところやヘンなとこがいっぱいあったなぁ。
なんにしても、ゴブニャガルドは楽しいです。ゴブニャ、ゴブニャー、ホブニャー、って言い過ぎて、舌噛みそうになったけど。

ともあれ、拙いマスタリングにおつきあい頂いて、ありがとうございましたm(_ _)m>PLのみなさま

いまさら、IOのエンコーディングの便利さに気づいた

$stdout の外部エンコーディングを指定した

YamlUTF-8しかサポートしてないことに気付かされ、呆然としていたのは昨日のこと。
だって、Windowsだと、ソースを Windows-31Jで書いとかないと、特にテストの時にとてもとても不便だもん。
ちなみに、わたしは specの descriptionとか、全部日本語で書いてます。ソースにもばんばん日本語でコメントしちゃうどころか、データもソースに直書きしたりとか、フリーダムな感じで。
んで、今朝がた、IOって内部エンコーディングと外部エンコーディングの自動変換してくれるんじゃなかったけと思い出し。要はWindowsコマンドプロンプトWindows-31Jで出力してくれたらいいわけで、これってまさに、external_encoding を指定する局面じゃないでしょうか、と。
気が抜けるほど、あっさりいけました。

# -*- coding: UTF-8 -*-
$stdout.set_encoding('Windows-31J')
#(普通にコードを書く)

こやって書いとくと、puts したら文字化けせずにWindowsコマンドラインに表示されます。p だとダメですが。
こんなに便利なものだったのかー。もっと早く気づいておくべきでした。

rspec でちょと小細工した

ホクホクと、Brounieのソースを全部↑で直していったのですが。
テストが、failするコードを書いたら、テスト結果(「...*..F」とか出るやつ)は期待通りなのになんか出力の途中で Encoding::CompatibilityError が出てるるる。
UTF-8Windows-31J を繋げようして、例外が出てるので、明らかにいまの変更が悪い。。。
formatter なら、なんとかなるかなと思って、ソースを見に行って(こういうとこが、スクリプト言語って気軽で良いです)、エラーが出てるコードを片っ端から encode して実験。
結果として、〜location の類が Windows-31J で帰ってくるのがいけないぽい。パスに 2byte文字を使ってるからかー。
一般的に対処するなら、出力する IOの内部エンコーディングをとってきてとかするとこですが、めんどーだし自分しか使わない環境なので、自分ルールに書き換え。<後の自分が嵌りそうなやり方
base_text_formatter.rb の中で、RSpec::Core::Formatters::BaseTextFormatter の中のメソッド 2ヶ所に、encode('UTF-8') を追加してます。

def dump_commands_to_rerun_failed_examples
  # (略)
  failed_examples.each do |example|
  output.puts(red("rspec #{RSpec::Core::Metadata::relative_path(example.location).encode('UTF-8')}") + " " + cyan("# #{example.full_description}"))
end
def dump_shared_failure_info(group)
  output.puts "#{long_padding}Shared Example Group: \"#{group.metadata[:shared_group_name]}\" called from " +
   "#{backtrace_line(group.metadata[:example_group][:location]).encode('UTF-8')}"
end

コマンドプロンプトに、メッセージもデータもきれいに表示されるようになりました。
まんぞく♪
って、テストが期待通り failするとこに到達しただけなのだけど

(2012/11/06 追記) だめじゃん

むむむ、データが相変わらず文字化けしてることを発見。

should_recieve ですごくはまったこと

BounieBotを大改造するにあたって、specを書き直してるわけなのですが。
should_receive とゆー、便利な expection(じゃないのかも)を使おうとして、すごくはまりました。

should_receive って先に書かなきゃだめなのね!
こんな、ちんまいspecを通すのに、えらい悩んでしまいました。。。

class SourceClass
   def trance_class(message)
      SinkClass.class_method(message)
   end
end

class SinkClass
   def self.class_method(message)
      p 'class_method: '+ message
   end
end

describe SourceClass do
   describe '#trance_class' do
      it 'trance to SinkClass.class_method' do
         SinkClass.should_receive(:class_method) # これを(A)に書いてた
         source = SourceClass.new
         source.trance_class('Message')
         # (A) ここに書いたら Failするよ
      end
   end
end

りゅうたまセッション「盗まれた舌」

今年も収穫祭の時期がやってきました。スヴォルの町でのお祭りに、近隣の村からは奉納品を抱えた村人が集まります。サンテニー村からも、領主の血縁のお嬢さまを旗頭に、5人が旅立ちました。

続きを読む

猫森集会2012 Bプログラム<カズオくんと不思議なオルゴール>

とりあえず、ネタバレじゃない「NANUK」、素晴らしかったです。浩子さんもすごく気持ちよさそうに歌ってて、オーロラが見えるような壮大な仕上がりでした。でも、Rollyさん、この曲で顔芸はやめてヽ(^^;)ノ。
Rollyさん曰く、こんなにギター弾きまくりなアルバムは『ROLLY谷山浩子のからくり人形楽団』が初めてだそうですが、すごいギターうまいのに。浩子さんは、浩子さんの足りない前に出てく部分をRollyさんが担当してくれたと言ってましたが、Rollyさんも浩子さんと一緒に演ることで自由になってるのかなー。だといいな。

続きを読む