jijixi's diary http://jijixi.azito.com/cgi-bin/diary/index.rb jijixi Copyright 2008 jijixi <jijixi@azito.com>, copyright of comments by respective authors http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081120#p03 2008-11-20T22:36:53+09:00 ささやかな楽しみ:ゲームで震えるほど良かった名言 jijixi clip game 303 を見て泣いた。 なんてタイムリーな。 そしてその場面を見るために DS 版をがんばって進める決意をした。 全体的にカエルはカッコ良すぎ。 58 は笑ったな。 メモリーカードの中を見て色々言ってくるんだよね。 わしは何て言われたんだったかな。忘れた。 あと 46 の念動力もあまりのバカバカしさに大笑いしたもんだ。 サイコ・マンティス最高。 ささやかな楽しみ:ゲームで震えるほど良かった名言

>>303 を見て泣いた。 なんてタイムリーな。 そしてその場面を見るために DS 版をがんばって進める決意をした。 全体的にカエルはカッコ良すぎ。

>>58 は笑ったな。 メモリーカードの中を見て色々言ってくるんだよね。 わしは何て言われたんだったかな。忘れた。 あと >>46 の念動力もあまりのバカバカしさに大笑いしたもんだ。 サイコ・マンティス最高。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081120#c02 2008-11-20T19:27:59+09:00 2008-11-20のツッコミ[2] (jijixi) jijixi いやほんとにw 仕事と睡眠に必要な時間はそのままで一日の時間が延びてくれれば良いんですが。 仕事と睡眠に必要な時間はそのままで一日の時間が延びてくれれば良いんですが。

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081120#c01 2008-11-20T19:05:00+09:00 2008-11-20のツッコミ[1] (しばた) しばた やっぱりゲームやるには一日24時間は足りなすぎますよねぇ http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081120#p02 2008-11-20T14:26:44+09:00 クロノトリガー DS 版 jijixi game なんか店に行ったら売ってたんでつい買ってしまったんだが、事前にまったく情報収集してなかったからどんな風になってるか不安でしかたなかったりとか。 ちょろっと見た感じでは、とりあえず FF3 みたいな余計なお世話リメイクとかじゃなく、普通に DS に最適化しただけの素直な移植って感じみたいで一安心。 ただ戦闘画面が DS 用新バージョンと元々のバージョンが選べるみたいなんだけど、どう考えても新しい方は見づらい。 見なければならない情報が分散しすぎてて、どこに焦点合わせて見ればいいのかわからん。 ともあれ、完全移植と.. クロノトリガー DS 版

なんか店に行ったら売ってたんでつい買ってしまったんだが、事前にまったく情報収集してなかったからどんな風になってるか不安でしかたなかったりとか。

ちょろっと見た感じでは、とりあえず FF3 みたいな余計なお世話リメイクとかじゃなく、普通に DS に最適化しただけの素直な移植って感じみたいで一安心。 ただ戦闘画面が DS 用新バージョンと元々のバージョンが選べるみたいなんだけど、どう考えても新しい方は見づらい。 見なければならない情報が分散しすぎてて、どこに焦点合わせて見ればいいのかわからん。

ともあれ、完全移植と言いつつローディングの嵐で超絶劣化移植だった PS 版に比べれば普通に遊べそうだからちまちまやるでしょう。

…… つーか、積みゲー多すぎで消化できる自信が無いんだけども。 スパロボ Z はこの前ようやく終わったけど、通常なら普通にやるはずの二周目に手を付ける気になれない。 そもそも明らかに時間がかかりまくる事必至のメガテンシリーズが、アバドン王、真IIIノククロ、PSP 版デビルサマナーと三つもキューに入ってる時点で終わってると思うんだ。 ほんとはペルソナ3だってやりたいのに買わないで我慢してるし。 だいたいもう4まで出てるっての。 でもたぶん廉価版が出たら買っちゃう。きっと積むけど。 その上、ニコでプレイ動画見てたら懐しくなっちゃってゲームアーカイブでソウルハッカーズ出ねーかなーとか思っちゃってるわしはもうダメだと思う。 ほんと自重できなさすぎ。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081120#p01 2008-11-20T13:17:25+09:00 jijixi 雑談 もっさり積った。もうすっかり冬です。

もっさり積った。もうすっかり冬です。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081119#p01 2008-11-19T18:27:57+09:00 jijixi 雑談 もっさもっさ降っとるわ。 これは積もる。

もっさもっさ降っとるわ。 これは積もる。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081118#p02 2008-11-18T20:39:12+09:00 正規表現むずい jijixi 雑談 なんか変なハマり方してちょっと悩んだ。 irb(main):001:0 /^(.+)\./.match('foo.bar.baz').to_s = "foo.bar." irb(main):002:0 /^(.+?)\./.match('foo.bar.baz').to_s = "foo." irb(main):003:0 /\.(.+)$/.match('foo.bar.baz').to_s = ".bar.baz" irb(main):004:0 /\.(.+?)$/.match('foo.bar.baz').to_s = ".bar.baz" 4 つ目は '.baz' になると思い込んでて、そのパターンを使って expected を自動生成してテストしたら、そりゃいくら正しく実装してもパスしねーという。 正規表現むずい

なんか変なハマり方してちょっと悩んだ。

irb(main):001:0> /^(.+)\./.match('foo.bar.baz').to_s
=> "foo.bar."

irb(main):002:0> /^(.+?)\./.match('foo.bar.baz').to_s
=> "foo."

irb(main):003:0> /\.(.+)$/.match('foo.bar.baz').to_s
=> ".bar.baz"

irb(main):004:0> /\.(.+?)$/.match('foo.bar.baz').to_s
=> ".bar.baz"

4 つ目は '.baz' になると思い込んでて、そのパターンを使って expected を自動生成してテストしたら、そりゃいくら正しく実装してもパスしねーという。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081118#p01 2008-11-18T12:22:09+09:00 extension の typo jijixi 雑談 いつも extention と間違えてしまう。 そして一度書いてからは vim の補完を使って ext{^P} とかやっちゃうので typo したのが量産される罠。 -ion が付くときの sion と tion の違いがわからん。 暗記苦手だから例えば extension だと「拡張 + ion」って連想で思い出すんだけど、 extend + ion なら tion になりそうな気がしちゃうんだよなー。 -sion と -tion とか、-er と -or とか、英語はめんどくさいよ。 かと言って、変数名とかに日本語使いたいかというとそれはそれで何と言うか…… extension の typo

いつも extention と間違えてしまう。 そして一度書いてからは vim の補完を使って ext{^P} とかやっちゃうので typo したのが量産される罠。

-ion が付くときの sion と tion の違いがわからん。 暗記苦手だから例えば extension だと「拡張 + ion」って連想で思い出すんだけど、 extend + ion なら tion になりそうな気がしちゃうんだよなー。

-sion と -tion とか、-er と -or とか、英語はめんどくさいよ。 かと言って、変数名とかに日本語使いたいかというとそれはそれで何と言うか……

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081116#p01 2008-11-16T13:22:28+09:00 なぜアジアシリーズのテレビ中継が無い jijixi 雑談 せめて決勝くらいはやってくれると思ってたのに、今朝新聞見てがっかりしたょ…… 昨年、一昨年はほぼ全試合見れたのに。 なぜアジアシリーズのテレビ中継が無い

せめて決勝くらいはやってくれると思ってたのに、今朝新聞見てがっかりしたょ…… 昨年、一昨年はほぼ全試合見れたのに。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081115#p04 2008-11-16T00:25:50+09:00 R-TYPE FINAL 日記、芸が細かい jijixi game ステージ 1.0 の冒頭で画面奥から画面後方に飛んでいく物体がステージ F-B の自機だということに気付いた。 おそらく F-B ルートのエンディングの場面だろう。 つまりステージ F-B は 1.0 の前の話ということか。 さすが超次元生命体だなバイド。 時間とかもう超越してる。 R-TYPE FINAL 日記、芸が細かい

ステージ 1.0 の冒頭で画面奥から画面後方に飛んでいく物体がステージ F-B の自機だということに気付いた。 おそらく F-B ルートのエンディングの場面だろう。 つまりステージ F-B は 1.0 の前の話ということか。 さすが超次元生命体だなバイド。 時間とかもう超越してる。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081115#p03 2008-11-15T23:00:24+09:00 R-TYPE FINAL 日記、ファイナルステージ B をクリア、C は……無理じゃね? jijixi game 相変わらず難易度は BABY ですが何か。 F-A に比べてあまりにも盛り上がらない。 そもそも展開が鬱すぎる。 それに強制的に使わされる自機が使いにくい。 ムキーって言いながら戦ってたよ、もう(疲 で、この際だからファイナル C も終わらせようと思ったんだけど、始まってすぐの説明でハァ?ってなった。 使用できるのは 1 機だけ、コンティニューも不可、って何その鬼畜条件。 そしてほとんど何も見る前に最初の攻撃で死ぬわし、へたれすぎる。 ひどすぎるだろ、常識的に考えて。 反射神経で何とかするタイプのゲームじゃなくてパターン.. R-TYPE FINAL 日記、ファイナルステージ B をクリア、C は……無理じゃね?

相変わらず難易度は BABY ですが何か。

F-A に比べてあまりにも盛り上がらない。 そもそも展開が鬱すぎる。 それに強制的に使わされる自機が使いにくい。 ムキーって言いながら戦ってたよ、もう(疲

で、この際だからファイナル C も終わらせようと思ったんだけど、始まってすぐの説明でハァ?ってなった。 使用できるのは 1 機だけ、コンティニューも不可、って何その鬼畜条件。 そしてほとんど何も見る前に最初の攻撃で死ぬわし、へたれすぎる。

ひどすぎるだろ、常識的に考えて。 反射神経で何とかするタイプのゲームじゃなくてパターン憶えてなんぼなんだからさ、何度もやらなきゃクリアできるようになんてならねーって。 なのに一発で終了とかありえない。 これでも、そこに辿り着くまでに結構な時間と労力をかけてるのに、5 秒で終了とか泣けるわ。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081115#p02 2008-11-15T18:56:29+09:00 日本ハムの二岡獲得 jijixi 雑談 長打力不足を補いたいという意図はわかるけどマイケルを放出したのはツラいなー。 新聞の記事によれば金銭的な事情もあったみたいだから、しかたなのかもしれないけど。 武田久か建山をクローザーに持ってくるつもりなのか、それとも他にアテがあるのか。 何にしても不安だ…… 日本ハムの二岡獲得

長打力不足を補いたいという意図はわかるけどマイケルを放出したのはツラいなー。 新聞の記事によれば金銭的な事情もあったみたいだから、しかたなのかもしれないけど。

武田久か建山をクローザーに持ってくるつもりなのか、それとも他にアテがあるのか。 何にしても不安だ……

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081115#p01 2008-11-15T11:23:55+09:00 DataMapper をいじる jijixi Merb DataMapper は Merb のデフォルト O/R Mapper。 さらっと眺めた感じで ActiveRecord と比べてみるとだいたいこんな↓ 感じかな。 DataMapperActiveRecord モデルクラスDataMapper::Resource を includeActiveRecord::Base を継承 マイグレーションrake db:automigrate or rake db:autoupgraderake db:migrate テーブル設定モデルクラスに書くマイグレーションファイルに書く タイプキャスト拡張が容易でたくさん揃ってるめんどいから結局 serialize でごまかす finderget(id), first(*args), all(*args)find(id), find(:first,*args), find(:all,*a.. DataMapper をいじる

DataMapper は Merb のデフォルト O/R Mapper。 さらっと眺めた感じで ActiveRecord と比べてみるとだいたいこんな↓ 感じかな。

DataMapperActiveRecord
モデルクラスDataMapper::Resource を includeActiveRecord::Base を継承
マイグレーションrake db:automigrate or rake db:autoupgraderake db:migrate
テーブル設定モデルクラスに書くマイグレーションファイルに書く
タイプキャスト拡張が容易でたくさん揃ってるめんどいから結局 serialize でごまかす
finderget(id), first(*args), all(*args)find(id), find(:first,*args), find(:all,*args)
dynamic finder

ダイナミックファインダは多分無い。 とりあえず find_by_name('hoge') みたいなのは first(:name => 'hoge') で良いみたいだが。 つーかわしの場合 ActiveRecord でも例外上がってほしくないときに find_by_id(id) にするとかその程度の使い方しかしてないからいらないって言えばいらないし。 ちなみに DataMapper の場合は、見付からないとき get だと nil で get! だと例外になる。 :conditions とかのオプション指定は AR と同じようなものみたいだけど、まだ詳しく調べてないので詳細は不明。

ではちょっとお試し。

% merb-gen model hoge
Loading init file from /usr/home/jijixi/tmp/merb_test/data-mapper-test/config/init.rb
Loading /usr/home/jijixi/tmp/merb_test/data-mapper-test/config/environments/development.rb
Generating with model generator:
     [ADDED]  spec/models/hoge_spec.rb
     [ADDED]  app/models/hoge.rb
Don't forget to define the model schema in your Hoge class
% cat app/models/hoge.rb
class Hoge
  include DataMapper::Resource
  
  property :id, Serial

  # 以下を自分で設定
  { :name    => String,
    :yaml    => Yaml,
    :site    => URI,
    :address => IPAddress,
    :file    => FilePath,
  }.each do |col, type|
    property col, type
  end
end

merb-gen のときに name:String,yaml:Yaml,... みたいに書いてやればあらかじめモデルクラスにプロパティ設定も書き出してくれるが、今回は自分で書いてみた。

% rake db:automigrate

ちなみに automigrate は一旦テーブルをすべて drop して作り直す。 autoupgrade は drop せずに変更する (らしい)。

とりあえずここまででモデルの用意は完了。 対話環境でいじってみる。

irb(main):001:0> h = Hoge.new
=> #<Hoge id=nil address=nil name=nil site=nil file=nil yaml=nil>
irb(main):002:0> h.address = '192.168.2.100'
=> "192.168.2.100"
irb(main):003:0> h.address
=> #<IPAddr: IPv4:192.168.2.100/255.255.255.255>

IPAddress 型に設定してあると IP アドレスを表わす文字列が IPAddr クラスのインスタンスに変換される。

rb(main):004:0> h.address = 'hoge'
ArgumentError: invalid address
 from /usr/local/lib/ruby/1.8/ipaddr.rb:422:in `initialize'
 from /usr/local/lib/ruby/gems/1.8/gems/dm-types-0.9.6/lib/dm-types/ip_address.rb:12:in `new'
(以下略)

パースに失敗するような文字列を渡すとエラー。

irb(main):005:0> h.site = 'http://example.com'
=> "http://example.com"
irb(main):006:0> h.site
=> #<Addressable::URI:0x4f020a4 URI:http://example.com>
irb(main):007:0> h.file = '/foo/bar'
=> "/foo/bar"
irb(main):008:0> h.file
=> #<Pathname:/foo/bar>

URI や FilePath もほぼ同様なパターン。

irb(main):009:0> h.yaml = {:foo => 'bar', :hoge => 'fuga'}
=> {:foo=>"bar", :hoge=>"fuga"}
irb(main):010:0> h.yaml
=> {:foo=>"bar", :hoge=>"fuga"}

Yaml の場合はこの時点だとそのままだけど、

irb(main):011:0> h.save
 ~ INSERT INTO "hoges" ("site", "file", "yaml", "address") VALUES ('http://example.com', '/foo/bar', '--- 
:foo: bar
:hoge: fuga
', '192.168.2.100')
=> true

irb(main):012:0> h = Hoge.get(h.id)
 ~ SELECT "id", "address", "name", "site", "file" FROM "hoges" WHERE ("id" = 1) ORDER BY "id" LIMIT 1
=> #<Hoge id=1 address=#<IPAddr: IPv4:192.168.2.100/255.255.255.255> name=nil
   site=#<Addressable::URI:0x4eea396 URI:http://example.com> file=#<Pathname:/foo/bar> yaml=<not loaded>>

irb(main):013:0> h.yaml
 ~ SELECT "yaml", "id" FROM "hoges" WHERE ("id" = 1) ORDER BY "id"
=> {:foo=>"bar", :hoge=>"fuga"}

というように、save するときに YAML.dump されて読み込むときに YAML.load される。

property の設定で使う型は基本的なものが DataMapper::Property::TYPES に、上で試してみたような拡張型が DataMapper::Types に定義されている。

型を自分で定義する場合は DataMapper::Type を継承したクラスを作り、適宜 self.load, self.dump, self.typecast を定義すれば良い。 DB に格納するときに dump、読み出すときに load、モデルオブジェクトの属性 (プロパティ) に値を代入するときに typecast が呼ばれるみたい。 lazy true と設定することで遅延読み込み型にしたり結構細かく制御できるみたいだね。

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081113#p01 2008-11-13T13:26:21+09:00 すごくどうでもいい話 jijixi Ruby 雑談 Ruby は代入も普通に値を返すので、あらかじめ変数に入れておくのではなく必要になったところで代入するということをよくやる。 ごく単純な例を出すと例えばハッシュに値が入ってたらそれを使って何かをするとかいう場合に、 hoge = hash[:foo] hoge * 2 if hoge とかじゃなく、 if (hoge = hash[:foo]) hoge * 2 end みたいに書くということ。 ちなみに条件式のカッコはこの場合必要無いけど、わしはこういう風にするときは何を代入してるかわかりやすいように常にカッコで囲むようにしてる。 もう少し複雑な式を書くようなシチュエーシ.. すごくどうでもいい話

Ruby は代入も普通に値を返すので、あらかじめ変数に入れておくのではなく必要になったところで代入するということをよくやる。 ごく単純な例を出すと例えばハッシュに値が入ってたらそれを使って何かをするとかいう場合に、

hoge = hash[:foo]
hoge * 2 if hoge

とかじゃなく、

if (hoge = hash[:foo])
  hoge * 2
end

みたいに書くということ。 ちなみに条件式のカッコはこの場合必要無いけど、わしはこういう風にするときは何を代入してるかわかりやすいように常にカッコで囲むようにしてる。 もう少し複雑な式を書くようなシチュエーションだとカッコ無しではパースエラーになることがあったりして考えるのめんどいし。

でまあ、ともかくわしはまったくナチュラルにこういう書き方をしてるんだけど、ふと思ったのが

hoge == hash[:foo]

っての (同値判定) とまぎらわしいから嫌いとか言う人もいるかもなあ、と。

そういう人ってそれなりにいそうだよなーと思いつつ、じゃあ自分でもそう思うかと自問自答してみたんだが、これが全くまぎらわしいとは思わない。 と言っても、イコール一つと二つを間違ったりしねーよ、ということじゃなくて、そもそも if の条件式に同値判定を書いた記憶が (少なくとも最近は) ほとんど無い。 なんでかってーと同値判定ならこう↓ 書いちゃうから。

case hoge
when hash[:foo]
  hoge * 2
end

間違えるはずが無いという。 それにイコール二つを一つに typo しちゃうというのはよくありそうだけど、一つを二つにというのはそうそう無いでしょ。 アル中だと危いけど。

そんなこんなで、万が一誰かに文句を言われても「まぎらわしくないよ、ぜんぜんまぎらわしくないよ」と言い張れることが判明したので一安心だったとさ。(いーのかなー、それで)

ツッコミを入れる

]]>
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081112#p07 2008-11-13T00:12:51+09:00 「マジかよ……」ってなったゲームの展開:VIPPERな俺 jijixi clip 177 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2008/11/10(月) 20:47:46.54 ID:44eec3rb0 2枚目のディスクに入ったらイキナリ振り子が揺れててエピソードが回想で進んでいった 何を言ってるかわからないと思うが俺もなにをいってるのか(ry なんというゼノギアスw いつになったらこの展開が終わるんだろうと思いながら、結局最後までそのままだったときの絶望感は完全にトラウマ。 「Disc 2をないことにすれば名作である」という言葉に「まあ確かにそうかもなあ」と、ついついつられてゲームアーカイブでゲットし.. 「マジかよ……」ってなったゲームの展開:VIPPERな俺

177 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2008/11/10(月) 20:47:46.54 ID:44eec3rb0

2枚目のディスクに入ったらイキナリ振り子が揺れててエピソードが回想で進んでいった

何を言ってるかわからないと思うが俺もなにをいってるのか(ry

なんというゼノギアスw

いつになったらこの展開が終わるんだろうと思いながら、結局最後までそのままだったときの絶望感は完全にトラウマ。 「Disc 2をないことにすれば名作である」という言葉に「まあ確かにそうかもなあ」と、ついついつられてゲームアーカイブでゲットしてしまったがトラウマが邪魔をしてプレイできないという。

ツッコミを入れる

]]>