2011-01

2011-01-04 

流石に「ファック」としか書いてない記事がトップに載りっぱなしはアレな気がしてきたので何か書くことにする。とはいえ、仕事始めなので面白いネタがあるわけではないのだが。

そういや去年の大晦日にFF13をクリアしたんだが、その感想はどうしたもんか。なるべくクリアしたゲームの感想は書くことにしようと思ってるんだが、開発者の事後検証で「やっちゃいました」と言ってるからなあ。


一応、FF13の感想を俺なりに軽く書いてみる。序盤が20時間続くという構成の酷さは散々言われてるが、その内容もとんでもなく酷い。FF13の方法論でスーパーマリオブラザーズの構成を考えると

こうなる。プレイヤーがゲームを進めるのに必要な知識やテクニックを能動的に習得できないのは凄く斬新だ。でも人間って自ら進んで体得しようとしないと、なかなか知識や技術は身につかない。単に操作方法やゲームシステムを説明するだけじゃチュートリアルにはならん。FF13が難しいとされる理由のうち、このチュートリアルがチュートリアルになっていないというのはかなりのウェイトになるんじゃないか。

他にも「客観的に見て欠点でしかないだろ、これ」というポイントだらけでいちいち論うのも面倒なので、構成の酷さと内容の稚拙さの指摘で終わらせておく。俺はプレイしていて開発者にバカにされてる気がして非常に不愉快だった。ユーザの審美眼とかそういうのが低く見られていると感じた以上に、開発者がゲームを蔑ろにしていると感じた。ゲームは独り善がりな三文芝居CGムービーで語られるストーリーを見せつけるためのものではない。

そのストーリーも、感想を政治的に正しい言葉で書けば「素人でも指摘できるテクニック上の問題だらけ」、政治的に正しくない言葉で書けば「ウォッカを飲んでLSDを服用し、ケツの穴にフリスクをしこたま詰め込んで書いてもここまで酷くはならないというぐらいのゴミ」なのだが。誰かあのマクガフィンが主人公やってるようなプロットに赤を入れる奴は居なかったのか。これじゃストーリー主導じゃなくてストーリーが主犯だ。

2011-01-05 

現在取り組んでる曲のチューニングがどうもスタンダードAっぽく、去年買ったギター(628mmスケール)じゃ厳しそう。出番は次の次だな。


昨日はちとFF13の感想を辛辣に書いた。FF13って前評判で否定意見を多く目にしたけど、

こんな感じで、まあ例によって大作特有の騒ぎすぎだろうと思っていた部分もあるし、実際ある程度はその通りでも仕方ないかと思い、安く売られてるのを見かけてつい買っちまったわけだ。実際の内容は前評判以上にアレだったというか、一本道だの街がないだのは本当に瑣末な問題で、もっとデカい問題が、客観的に見たゲームの構成上の問題があったという有様。

俺の意見が正鵠を射ているとまでは主張しないが、それでもわかり易くてどうでもいい事ばかり叩いてると、本当の問題が見えなくなる。例えばFF13は実にぶん殴りやすいゲームだけど、そんな脇の甘いゲームを世に出すような連中を支えてるのは他ならぬ俺らユーザーだよなあとか。

でもここ最近のスクエニとかを見てると、いい加減ユーザーから中指立てられるというか、既にある程度立てられてるとも思うが。


去年の暮れに『「頑張れば何とかなる」という言葉は半分以上が嘘で、「正しい頑張り方をしないとどうにもならない」が真実だろう』と書いたが、見方を変えれば正しくない頑張りにも多少の理はある。明らかに筋悪なトレーニングでも、時間をかけて量をこなせば身につくものはゼロじゃない。時間のある学生のうちに我流で何かやって痛い目見たりするのも、物によっちゃいい経験かもしれない。

でもさー、筋悪は筋悪なんだよ。それで変な成功体験を根拠に自信が付いて、指導的な立場になったときに筋悪な方法を他人に強いるとか悪夢だろ。勿論「あれは良いやり方じゃなかった」と反省するなら話は別だけど、反省しないでバカなやり方をバカの一つ覚えで繰り返す奴とかいるだろ。成功事例であっても事後検証をせねばならないのは当たり前だと俺は思うのだが、どうも成功したという事実の前にはそんなものは吹き飛んでしまうらしい。

というか過去の成功事例のやり方をそのまま新規プロジェクトに適用したあの会社の(裁判沙汰になるので略)。

2011-01-11 

最近覚えた言葉:「今日から月曜日」

使い所:休日前に急ぎの仕事を入れるときに使う


携帯電話のバッテリーが切れていたので充電&メール受信したら、どうやら俺は元旦にバッテリーが切れてからずっと放置していた模様。

いよいよもって携帯電話の存在意義が怪しくなってきた。通販で買い物したときとか、運送会社からの連絡受けるのには使ってるんだが。しかし発信履歴の最新は去年の5月。


俺が会社を飛び出してフリーランスなんて言うリスキーな道を選んだのも、学んだ専門知識がろくすっぽ生かせないクソな仕事の仕方を強いられるとか、そういうクソな環境を改善するための行動が最終的には徒労に終わる事に嫌気がさしたってのが理由の一端だったなあ。

若手の意見がまったく顧みられないというわけではなく、むしろきちんと聞いた上でどうしようもないという事もあるのではなかろうか。データの裏付などない、俺の個人的な経験からの意見でしかないが、多分若者が自分の実力を発揮できないと嘆いてる一方で、おっさん連中も若者の実力を引き出す術を知らずにテンパってるんじゃなかろうか。俺が会社を飛び出した背景には、そういう事があったのだが。

ところで他の新聞社の社説はろくな根拠もなく「若者は内向きだ」とか「ガッツがない、草食系だ」とか反吐のでそうなテンプレート通りのアジリを書いてるので、それに比べれば日経は相当まともに感じた。というか他の新聞は想定読者である老人のご機嫌取り要素を入れてるだけなのだろうが。

しかし「キャリアに関するデータの真相 その1:「若者は内向き」という誤解」が真実だとすると、根拠なしどころか盛大に間違っている事になるぞ、「若者=内向き」の論調で何か書いてる連中は。

2011-01-14 

俺はDAWにはardourというソフトウェアを使っているんだが、どうもテンポや拍子のマーカーをドラッグするとバグるようだ。対策はドラッグしないで所定のポジションを狙ってテンポ/拍子の変更ポイントを作成すること(これ自体は難しくない)。マーカーの作成及び削除だけなら正常に動作する。

結構厄介なバグくさく、2.8.11でも直ってない。というかSubversionのtrunkでも直ってないっぽい。まあ、バグがあるのは仕方がない。それほど理不尽でない回避方法があるだけ大分マシだ。


PythonでSAX処理を行うときのメモ。

SAX処理については、昔はこんな書き方をしていた。

from xml.sax.saxutils import DefaultHandler
class MyHandler(DefaultHandler):
    def __init__(self):
        DefaultHandler.__init__(self)

    def startElement(self, name, attrs):
        pass

    def endElement(self, name):
        pass

    def characters(self, char):
        pass


handler = MyHandler()
parser = sax.make_parser()
parser.setFeature(sax.handler.feature_namespaces, 1)
parser.setContentHandler(handler)
parser.parse(...)

が、これだとmake_parserで使いたくないパッケージのSAX実装が使われることがあるのが難点で、DTD検証とかやんなくていい場合でも実行されたりするのでたまったもんじゃない。

だからもうexpatを直に使うことにした。

import xml.parsers.expat
handler = MyHandler()
parser = xml.parsers.expat.ParserCreate()
parser.StartElementHandler = handler.startElement
parser.EndElementHandler = handler.endElement
parser.CharacterDataHandler = handler.characters
parser.Parse(...)

2011-01-19 

たまにはプログラミングのトホホなネタでも。

プログラミング言語のGCは便利だけど、稀に脱力物のバグを仕込んでしまう。例えば以下のコードを考えてみる。

def foo(self):
    f = self.open_file("/path/to/file", "wb");
    f.write("foo");

ファイルを開いて文字を書き込み、そしてファイルを閉じていない。マトモな頭でファイルIOを行うクラスの設計をするなら、データを内部バッファに貯めておき、closeメソッドなどが呼ばれたら実際に書き込むという処理になるだろう。GC付きの言語だとオブジェクトがスコープから外れたときにGCが走り、その際にオブジェクトのデストラクタでcloseを呼ぶようにするだろうが、それを前提にコードを書くのは考え物、はっきり言えばアホ。

GCのアルゴリズムによってはどのタイミングでGCで回収されるか厳密にはわからんというのもそうだが、例えば前述の例ではopenFileメソッドで生成されたオブジェクトへの参照が、実はコードを書いた本人の知らないところにもあるという可能性がある。その場合、GCで回収されるタイミングはその別のところの参照も切れたときになるので、思わぬ相互作用で酷い目にあうかもしれない。

いや、「かもしれない」じゃなくて実際にやらかしたんだけどさ。何かテストで書いたコードが妙な挙動になるなあと思ってたら、上記のコードと似たようなヘマをしていたという。ちゃんとcloseを呼べばいいっちゃそうだが、ど忘れする時はあるからなあ。

その点、Pythonはwithを使えば確実にwithのスコープから抜けたときの処理を走らせることができる。さっきの奴を書き直すとこんな感じ。

def foo(self):
    with self.open_file("/path/to/file", "wb") as f:
        f.write("foo")

これは変数のスコープをより狭めるという意味でも明らかに優れている。

with文は正式にはPython2.6からの機能なので、2.5対応が必要な時にはいちいち__future__からインポートしないといけないのだが、まあ面倒くさがらずに使った方がいいだろ。


去年の暮れにSentencedの1stの感想を書きつつカバーを披露というネタをやったが、あれ全面的にリファインしたいなあ。デビュー前のデモが収録されたバージョンが売られているので、デモからもピックアップする形で書き直そう。

問題はデモの方はタブ譜が手に入らないので、全パート耳コピせねばならんことなのだが。まあ、North from hereの曲よりはマシだ。

2011-01-20 

森のテグー 2

やっぱり施川ユウキは凄いよ。基本的な作風は全部一緒で、それでいて作品毎に個性を出しつつ毎回面白いんだもの。ネタ出しが大変とは本人も語っているが、それを10年以上やってるのは本当に脅威的だ。多分、持ってるネタの引き出しがやたら深くていろいろ入っているのだろう。

そういえば、年齢が高めのキャラクターには初期というか「がんばれ酢めし疑獄!!」の頃を彷彿とさせるハードコアなネタをやらせる役回りになっているように感じる。「12月生まれの少年」も概ねそのようで、「サナギさん」が施川作品で随一のわかりやすさなのはその辺が理由かなとも思ったり。

それにしても巻末のエッセイが相変わらず印象的で、不意打ち気味に訪れるラストエピソードと相まってしんみりした気分になる。

2011-01-23 

Sentencedの1stの記事をいろいろ改訂。リイシュー版の記述に変えて、二曲ほど演奏を追加。思い立ったが吉日と耳コピ完了即録音というふざけたやり方だったので、まあ今回も演奏の品質はアレだが。前回やったWhen the moment of death arrivesは、流石に歌を引っ込めすぎた気がしてきたのでミックスをやり直した。

それとファイルのフォーマットをoggにした。これはmp3よりも圧縮率がいいのが理由で、oggenc使ったらlameで可変ビットレートでやった場合の半分ぐらいの容量で済んだ。faacでaacにするのも試してみたが、これもoggには敵わず。

そして今はNorth from hereの曲の耳コピをしているのだが、まったくもって弾ける気がしない。殆ど全ての楽曲のギターリフでピッキングの速度と持久力を要求され、ギターソロに至っては発狂していて何が何やらわからん。どうしてデビュー作の次でこんなトチ狂ったアルバムが作れるんだよ。


3DSは同時発売のタイトルにそそられる物がなかったので、ちょっと様子見。3月以降はやってみたいソフトが出てくるので、買うのはそれからだな。

……断じて予約し損ねたわけじゃないからな。

2011-01-24 

小学生の頃、何でもいいから「小説を書け」という課題が出されたことがあり、俺はその時に「野垂れ死んだ極悪人が地獄に落ちて拷問を繰り返し受け、その果てに無になって消える」という話を書いた。タイトルは「どざえもんの地獄巡り」で、あの頃から俺ってあんまり変わってないのか、俺はナチュラルボーンエクストリーミストなのかと思うが、思い返してみるとあの内容に文句つけずに「すげえ発想だなお前」で済ませた先生は実に偉かったな。


ghostscript-gpl-9.0が腐っているのでプリンターでカラー印刷がまともにできなくなった。8.71-r6に戻して解決したが、何の理由で9.0に上げたんだっけか忘れたのでequeryで探した所、どうもghostscript-gpl-9.0に依存してるパッケージが存在しなかった。これはあれか、実験的なパッケージを入れる→ダメだったので削除の合い間にバージョン上げちゃったのか。

2011-01-27 

いくつかのプログラミング言語には、連続した文字列を自動で連結するという気の触れた仕様が採用されている。

s = 'foo' 'bar' # 'foobar'として扱われる

どこの誰がこんな事を押っ始めたのか俺は知らないが、少なくともCにはあった仕様だ。

この仕様は次のような事故に繋がる。

some_list = [
    'foo',
    'bar'
    'buz' # 前の行と結合されてしまう
]

これは長い文字列をソースコードに書く際の負担を軽減するために取り入れられたという話を聞いたことがあるが、しかしこれは弊害が無視できないだろ。

ちなみにCatyスクリプト及びXJSONではこの仕様を一時期検討していたが、上記の問題がネックになって却下となった。


新型PSP「NGP」発表か。写真で見る限りでは十字キーと四つのボタンの配置されている部分をドーム状に凹ませているっぽい。さすがにPSP同様に完全にフラットなデザインにはなってないか。

DSの下画面のデザインを改めて見てみると、タッチパネルの周囲をアーチ上に盛り上がったデザインにするなど、どのシリーズでも十字キーやボタンで操作してる最中にタッチパネルに不意に指がかかりにくくなるようにデザインされている。3DSも同じ路線のデザインになっているようだ。

それでNGPだが、この凹ませたデザインがどれだけプレイアビリティに影響があるかが気になる。まあ、発売されるタイトルが全然わからんので買うかどうかは未定だが。イレギュラーハンターX2が出るなら何が何でも買うのだが、これは無理だろうな……。

ちなみに3Gがどうのこうのは心の底からどうでもいい。

2011-01-30 

どこの誰とは言わんがFF13 Versusで新宿らしき街が舞台なのを「日本の都市が舞台なのは 和製RPGで初の試み」みたいに書いてるアホがいたが、お前メガテン知らんのか。


これは遊ぶ側としても痛感してるというか、余計な新システムを入れてみたは良いけど明らかに全体としては質を落としてるというゲームを遊ぶとちと残念な気持ちになる。別に新規性の追求は否定しないけど、無理に入れてくれるなとも思う。

そもそも本当に新しいゲームなんて滅多に出る物じゃないし、半ば脅迫されるように入れた新規性なんざ、新規性じゃねえよ。胸を張って「いつもの○○です」と言ってくれていいんだよ、マジで。


そろそろCreoleライブラリの1.1(内容はCreole 1.0への準拠度の向上)のリリースをしたいなあとか、CatyからXJSONを外部ライブラリとして分離したいなあとか、まあいろいろ思っているのだが、なかなか作業が進まず。というかやる気が起きず。

やっぱなあ、元のコードが仕事で完結気味で他のコードで利用してるわけではないというか、いやこのサイトはCatyで作ってるけどCreoleとXJSONを単体で使ってるわけではないから、ライブラリを分離してリリースとなると、やっぱ一番ホットに感じてるところから離れた気がするのがなあ。