>>303 を見て泣いた。 なんてタイムリーな。 そしてその場面を見るために DS 版をがんばって進める決意をした。 全体的にカエルはカッコ良すぎ。
>>58 は笑ったな。 メモリーカードの中を見て色々言ってくるんだよね。 わしは何て言われたんだったかな。忘れた。 あと >>46 の念動力もあまりのバカバカしさに大笑いしたもんだ。 サイコ・マンティス最高。
]]>なんか店に行ったら売ってたんでつい買ってしまったんだが、事前にまったく情報収集してなかったからどんな風になってるか不安でしかたなかったりとか。
ちょろっと見た感じでは、とりあえず FF3 みたいな余計なお世話リメイクとかじゃなく、普通に DS に最適化しただけの素直な移植って感じみたいで一安心。 ただ戦闘画面が DS 用新バージョンと元々のバージョンが選べるみたいなんだけど、どう考えても新しい方は見づらい。 見なければならない情報が分散しすぎてて、どこに焦点合わせて見ればいいのかわからん。
ともあれ、完全移植と言いつつローディングの嵐で超絶劣化移植だった PS 版に比べれば普通に遊べそうだからちまちまやるでしょう。
…… つーか、積みゲー多すぎで消化できる自信が無いんだけども。 スパロボ Z はこの前ようやく終わったけど、通常なら普通にやるはずの二周目に手を付ける気になれない。 そもそも明らかに時間がかかりまくる事必至のメガテンシリーズが、アバドン王、真IIIノククロ、PSP 版デビルサマナーと三つもキューに入ってる時点で終わってると思うんだ。 ほんとはペルソナ3だってやりたいのに買わないで我慢してるし。 だいたいもう4まで出てるっての。 でもたぶん廉価版が出たら買っちゃう。きっと積むけど。 その上、ニコでプレイ動画見てたら懐しくなっちゃってゲームアーカイブでソウルハッカーズ出ねーかなーとか思っちゃってるわしはもうダメだと思う。 ほんと自重できなさすぎ。
]]>もっさり積った。もうすっかり冬です。
]]>もっさもっさ降っとるわ。 これは積もる。
]]>なんか変なハマり方してちょっと悩んだ。
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 を自動生成してテストしたら、そりゃいくら正しく実装してもパスしねーという。
]]>いつも extention と間違えてしまう。 そして一度書いてからは vim の補完を使って ext{^P} とかやっちゃうので typo したのが量産される罠。
-ion が付くときの sion と tion の違いがわからん。 暗記苦手だから例えば extension だと「拡張 + ion」って連想で思い出すんだけど、 extend + ion なら tion になりそうな気がしちゃうんだよなー。
-sion と -tion とか、-er と -or とか、英語はめんどくさいよ。 かと言って、変数名とかに日本語使いたいかというとそれはそれで何と言うか……
]]>せめて決勝くらいはやってくれると思ってたのに、今朝新聞見てがっかりしたょ…… 昨年、一昨年はほぼ全試合見れたのに。
]]>ステージ 1.0 の冒頭で画面奥から画面後方に飛んでいく物体がステージ F-B の自機だということに気付いた。 おそらく F-B ルートのエンディングの場面だろう。 つまりステージ F-B は 1.0 の前の話ということか。 さすが超次元生命体だなバイド。 時間とかもう超越してる。
]]>相変わらず難易度は BABY ですが何か。
F-A に比べてあまりにも盛り上がらない。 そもそも展開が鬱すぎる。 それに強制的に使わされる自機が使いにくい。 ムキーって言いながら戦ってたよ、もう(疲
で、この際だからファイナル C も終わらせようと思ったんだけど、始まってすぐの説明でハァ?ってなった。 使用できるのは 1 機だけ、コンティニューも不可、って何その鬼畜条件。 そしてほとんど何も見る前に最初の攻撃で死ぬわし、へたれすぎる。
ひどすぎるだろ、常識的に考えて。 反射神経で何とかするタイプのゲームじゃなくてパターン憶えてなんぼなんだからさ、何度もやらなきゃクリアできるようになんてならねーって。 なのに一発で終了とかありえない。 これでも、そこに辿り着くまでに結構な時間と労力をかけてるのに、5 秒で終了とか泣けるわ。
]]>長打力不足を補いたいという意図はわかるけどマイケルを放出したのはツラいなー。 新聞の記事によれば金銭的な事情もあったみたいだから、しかたなのかもしれないけど。
武田久か建山をクローザーに持ってくるつもりなのか、それとも他にアテがあるのか。 何にしても不安だ……
]]>DataMapper は Merb のデフォルト O/R Mapper。 さらっと眺めた感じで ActiveRecord と比べてみるとだいたいこんな↓ 感じかな。
| DataMapper | ActiveRecord | |
| モデルクラス | DataMapper::Resource を include | ActiveRecord::Base を継承 |
| マイグレーション | rake db:automigrate or rake db:autoupgrade | rake db:migrate |
| テーブル設定 | モデルクラスに書く | マイグレーションファイルに書く |
| タイプキャスト | 拡張が容易でたくさん揃ってる | めんどいから結局 serialize でごまかす |
| finder | get(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 と設定することで遅延読み込み型にしたり結構細かく制御できるみたいだね。
]]>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 しちゃうというのはよくありそうだけど、一つを二つにというのはそうそう無いでしょ。 アル中だと危いけど。
そんなこんなで、万が一誰かに文句を言われても「まぎらわしくないよ、ぜんぜんまぎらわしくないよ」と言い張れることが判明したので一安心だったとさ。(いーのかなー、それで)
]]>177 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2008/11/10(月) 20:47:46.54 ID:44eec3rb0
2枚目のディスクに入ったらイキナリ振り子が揺れててエピソードが回想で進んでいった
何を言ってるかわからないと思うが俺もなにをいってるのか(ry
なんというゼノギアスw
いつになったらこの展開が終わるんだろうと思いながら、結局最後までそのままだったときの絶望感は完全にトラウマ。 「Disc 2をないことにすれば名作である」という言葉に「まあ確かにそうかもなあ」と、ついついつられてゲームアーカイブでゲットしてしまったがトラウマが邪魔をしてプレイできないという。
]]>