ConEmuで起動時にコマンドを実行する方法
クライアントPCはずっとWindowsを使ってるのですが、やっぱりrspecとか色付きで結果が出て欲しいと思ってちょっと探してみたらいい感じのエミュレーターがありました。なかなか快適です。
http://code.google.com/p/conemu-maximus5/
で、デフォルトのプロンプトを変更したいなーと思ってやってみました。
まじめにダイアログの表示を読めば判る内容ですが、めもめも。
CGIでちょーはまったこと。TeraPadでは、UTF-8Nで保存するべし
こないだっから突然CGIが動かなくなってちょーはまってたのですが、解決したのでメモを残しておくのです。
まず結論から。
CGIをUTF-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 の外部エンコーディングを指定した
YamlがUTF-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-8 と Windows-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人が旅立ちました。
続きを読む