http://blog.judstyle.jp/article/48062448.html MML考(1)
今回は高機能MMLコンパイラから見た構文解析とエラーについて。
構文解析時のエラー処理についてはユーザ入力データを解析して変換する動作のアプリなら必ず付きまとう問題だけど、
(1)実行時エラーを許容するか
(2)どこまでエラーとするのか警告で済ますのか
(3)エラー情報をどこまでユーザに伝えるか
の3点については判断がすごく難しい。音源とMMLの仕様が決まっていれば、MMLコンパイラの仕様はだいたいここくらいしか考えるところがないといっていい。
(1)実行時エラーを許容するか
MMLコンパイルと(便宜上こう呼ぶとして)ドライバによる演奏の場合、演奏中にエラーは許されないので、演奏開始時のエラーということになる。データ不整合まあ必要なファイルが足りない(PMD/FMPならPCMファイルがない)くらいしか発生し得ないけど、内部データでパラメータを相対操作する仕組みにするとここで躓く。
相対操作なんて何に使うんだという点では、オートフィルタあたりが代表的な要素になるのだろうけど、オーバー/アンダーフロー制御をするのかしないのか、という問題が出てしまう。
とはいえ、実行時エラーは許容できないというのが現実的な回答なので、上限下限張り付きか、フロー許容で(たとえば8bitなら-128と127を)循環させるのかということになる。上限下限張り付きであれば、内部的には上限下限を超えて計算し続けるのか、上限下限で値を留め置くのかという問題も出るし、設定可能にすればユーザの手間が増える。
(2)どこまでエラーとするのか警告で済ますのか
構文エラーと論理的なエラーとデータエラー、未定義情報の取り扱いについて。defaultに関する議論でもあるので略。
(3)エラー情報をどこまでユーザに伝えるか
もっとも大きな問題は、エラー箇所の報告。長いMMLになってくると、どこでエラーになったのかわからなくなることがある。特に再利用・流用で大量のMMLを追加した直後のコンパイルで危ない。メタなMMLコマンドは展開してから構文解析したいが、展開してから構文誤りを見つけた場合に該当MMLをユーザに示してエラー報告してもユーザがわからない可能性がある。
ユーザにわかりやすい情報を示すためにはpass数を減らして、構文解析しながら論理解析して演奏データを作成することになるけど、高機能MMLコンパイラでそれをやろうとすると負荷が増える。MML入力でコンパイラの応答が悪いことは生産性に直結するので、バランスを取らなくてはならないなあ。FMP7のコンパイラの作りも、ここの制限を多分に受けてると思うけど。
----
実際にはMML記法やデータ設計も平行して進めないと解決はしないので、一発で答えが出ない検討ばかりしてるような気はする。
あと、高機能MMLは仕様が複雑化していくのでそこらへんも解決しないとなあ。自分しか使わねーよ、ということについてはともかく、新しいMMLを起こすたびに定義定義ではイヤんなっちゃう。デフォ値設定やincludeについては慎重にやっていかないと…
2011年09月30日
2011年09月26日
'11F1シンガポールGP
http://www.gpupdate.net/ja/f1-news/268716/
GPUPDATE.net
1位は(以下略
レース展開としてはスタートでウェバーがルイスと共に沈んだことでどうしようもなくなっちゃったので…
RBRのズ抜けた速さを見てると、ニューウェイの他にもいいデザイナーを揃えて贅沢なことだな…とか思っちまうなあ。まあF1というかモータースポーツなんて、最も速い車を持つチームのエースが勝つものだからな、というのはスレ過ぎなような気もするが、まあしょうがない。DRSが有効になる頃にはだいたい独走になっちゃってるしな、そういう意味では今も昔も変わらないということかね。
今年はF1日本GPを観に行く人が身近にもいるんだけど、二輪やロードゴーイングカーあたりのマニアならともかく、俺らあたりの世代のF1マニアは『地方の放送局が気紛れで流したF1中継や特集のテープをどうやって手に入れるか』とか、『F1プラモ組み立て』とか、『年鑑を手に入れて電卓片手にラップチャートと睨めっこしながらレース展開を読み解く』とか、『スペックとトレンド変遷についてトーク』あたりが中心で、ナショナルカテゴリのレースならともかくF1を観に行くという発想は存在しないんだよねえ(遠い目
49Lapsでのルイスのピットイン時、最初からソフトだのスーパーソフトだの言っときゃいいのに、知識も身についてないし勉強すらせずにカッコつけるもんだからハードと言ってしまったりオプションとプライムを言い間違えるんだよ…古舘伊知郎みたいなのに憧れてるんだろうケドな。功罪はともかく、アレ以降古舘の形だけ真似するバカが増えたのは確かだ。
あと、大勢には影響なかったのは確かだけど、KERSが存在しないかのような中継だったのはなんでなんだぜ?
GPUPDATE.net
1位は(以下略
レース展開としてはスタートでウェバーがルイスと共に沈んだことでどうしようもなくなっちゃったので…
RBRのズ抜けた速さを見てると、ニューウェイの他にもいいデザイナーを揃えて贅沢なことだな…とか思っちまうなあ。まあF1というかモータースポーツなんて、最も速い車を持つチームのエースが勝つものだからな、というのはスレ過ぎなような気もするが、まあしょうがない。DRSが有効になる頃にはだいたい独走になっちゃってるしな、そういう意味では今も昔も変わらないということかね。
今年はF1日本GPを観に行く人が身近にもいるんだけど、二輪やロードゴーイングカーあたりのマニアならともかく、俺らあたりの世代のF1マニアは『地方の放送局が気紛れで流したF1中継や特集のテープをどうやって手に入れるか』とか、『F1プラモ組み立て』とか、『年鑑を手に入れて電卓片手にラップチャートと睨めっこしながらレース展開を読み解く』とか、『スペックとトレンド変遷についてトーク』あたりが中心で、ナショナルカテゴリのレースならともかくF1を観に行くという発想は存在しないんだよねえ(遠い目
49Lapsでのルイスのピットイン時、最初からソフトだのスーパーソフトだの言っときゃいいのに、知識も身についてないし勉強すらせずにカッコつけるもんだからハードと言ってしまったりオプションとプライムを言い間違えるんだよ…古舘伊知郎みたいなのに憧れてるんだろうケドな。功罪はともかく、アレ以降古舘の形だけ真似するバカが増えたのは確かだ。
あと、大勢には影響なかったのは確かだけど、KERSが存在しないかのような中継だったのはなんでなんだぜ?
2011年09月21日
MML考(1)
ちょっと↓のようなやりとりで考えたことなんだけど…
MMLを高機能化するとどうしても多段変換になってしまうので、どうせ多段化するなら中間データ仕様とそのI/Oをしっかり設計して、MMLと演奏データの自由度を増そうぜ、っていう考えは当然ながら前からあったんだけど、その変換を定義ファイルとして外出しすることは本気で考えたことはなかった。ちょっと探ってみようとは思う。
ところで、会話の中でも出てる通りFMP7はリバースエンジニアリング禁止だし、以前に軽く『正方向の互換コンパイラを作りたい』って投げてみたけどあっさりお断りされてしまったので、FMP7は一旦棚上げして、従来の方針通りMMLパーサを先に仕上げてしまおう、という決心はついた。
そもそも逆コンが綺麗なMMLを吐けない最大にして唯一の理由が『演奏データ生成時に不可逆な圧縮や変換を行う』ということなので、これを犯さない中間データ形式を定めれば問題は自ずと解決に向かうだろうね。まあMMLを不可逆変換しないで演奏データを作ることができれば問題はないんだろうけど、そんなことは無理。
実のところ、不可逆変換を伴わなければ正コンと逆コンでは処理系も大して変わらないし、そのコードを書く手間もそんなに大きくならないから、MMLパーサを作る視点からしたらメリットは大きい。問題は多分中間データから演奏データへのコンバートだけど…
というあたりで中間データの仕様を再考してみよう。MML仕様とMMLパーサは現行のものが流用できるし、MMLパーサを増設するというのは毎回新規で起こすよりは楽なんじゃないかと思う。もっとも、MMLパーサを1バイナリ+定義ファイルで運用する点についてはもうちょっと考えてみる。厳密にFMPとかPMDのMMLコンパイラを再現するのはどうなんだろうか、という意味で。
@otobeya_now: FMP7が古い曲データのバイナリ互換を持っていない辺り、俺はRCの今後に期待している件www
@Judstyle: FMPV4->MML-(手)->FMP7ってこと? それともF2PCVみたいにFMPV4->FMP7直結? FMP7の利用許諾んとこにリバースエンジニアリング不可って明記されちゃってるんで直結は難しいかな…何か怒られない方法探ってみるか…
@otobeya_now: そう、一旦ソース(もしくは中間言語?)に戻して、さらに目的のドライバのMML仕様に合わせてテキストで吐き出す形のコンバーターが出来たらすごいよねー。大昔に使ってた「リッチテキストコンバータ」みたいな感じで。
@Judstyle: それはF2PCV.dll->PMDRC.dll->PMDRCC.exeで既に通った道ですな…適当な中間形式を作るのが面倒で、PMD形式を中間形式として使った人でなしですw 『MML->中間データ->任意のデータ形式』の逆版なら作る価値ありか。
@otobeya_now: 言語仕様をXMLで記述するようにして、日本のどこかにいる偉い人に丸投げするのも手w
@Judstyle: ちょ、MMLをXMLで書くの? 一応MMLの仕様は2008年頃に策定済みで実装始めてるんだけどw - 駄日記08/10/22,JUDSTYLE.jp - http://blog.judstyle.jp/article/21627688.html
@otobeya_now: いや、単純に各ドライバ<>中間言語のMML変換テーブルを外部に持てば誰でも変換作れるようになるのかな?って話。Spiceとかに互換持たせればMIDIもイケるなw
@Judstyle: 理解。ただ中間データ->演奏データはテーブル方式だと処理速度上げるの難しいので、まんまDLLのプラグイン式にしたほうが多分早いんじゃないかと。あと乗ってくる人を見つけるのが大変そう、っていうかいないと思うw つまりdo it mayselfってことかなw
MMLを高機能化するとどうしても多段変換になってしまうので、どうせ多段化するなら中間データ仕様とそのI/Oをしっかり設計して、MMLと演奏データの自由度を増そうぜ、っていう考えは当然ながら前からあったんだけど、その変換を定義ファイルとして外出しすることは本気で考えたことはなかった。ちょっと探ってみようとは思う。
ところで、会話の中でも出てる通りFMP7はリバースエンジニアリング禁止だし、以前に軽く『正方向の互換コンパイラを作りたい』って投げてみたけどあっさりお断りされてしまったので、FMP7は一旦棚上げして、従来の方針通りMMLパーサを先に仕上げてしまおう、という決心はついた。
そもそも逆コンが綺麗なMMLを吐けない最大にして唯一の理由が『演奏データ生成時に不可逆な圧縮や変換を行う』ということなので、これを犯さない中間データ形式を定めれば問題は自ずと解決に向かうだろうね。まあMMLを不可逆変換しないで演奏データを作ることができれば問題はないんだろうけど、そんなことは無理。
実のところ、不可逆変換を伴わなければ正コンと逆コンでは処理系も大して変わらないし、そのコードを書く手間もそんなに大きくならないから、MMLパーサを作る視点からしたらメリットは大きい。問題は多分中間データから演奏データへのコンバートだけど…
というあたりで中間データの仕様を再考してみよう。MML仕様とMMLパーサは現行のものが流用できるし、MMLパーサを増設するというのは毎回新規で起こすよりは楽なんじゃないかと思う。もっとも、MMLパーサを1バイナリ+定義ファイルで運用する点についてはもうちょっと考えてみる。厳密にFMPとかPMDのMMLコンパイラを再現するのはどうなんだろうか、という意味で。
MHF360(22)
HR688でSR片手剣221/大剣100。
今週はだいたいやることやった余禄で『家具屋の毒怪鳥』も20回くらい回せた。激運付いてりゃ剛力珠の期待値は1クエスト1個を上回るんだけど、結果的にだいたい理論値出た。これが配信されてるから『罠師』が配信されてないと思うんだけど、もしこれでカラ骨と竜骨の在庫が切れてたら…と思うと怖いなあ。
明日から衝撃再配信が『また』来るけど、前回そこそこ稼いでおいたので今回は少しだけの予定。まあHCではないからつらくはないけど特異個体は狩ってて面白いのでそれなりに。
最近は匠・攻撃大・見切り+3が基本線で、そこから如何に上積みしていくかというあたりに到達。風圧不要なら匠大四、耳栓も不要なら匠特四くらいまでは行くんだけど…次の祭までに麻痺剣も組み込んでかないと、だなあ。
今週はだいたいやることやった余禄で『家具屋の毒怪鳥』も20回くらい回せた。激運付いてりゃ剛力珠の期待値は1クエスト1個を上回るんだけど、結果的にだいたい理論値出た。これが配信されてるから『罠師』が配信されてないと思うんだけど、もしこれでカラ骨と竜骨の在庫が切れてたら…と思うと怖いなあ。
明日から衝撃再配信が『また』来るけど、前回そこそこ稼いでおいたので今回は少しだけの予定。まあHCではないからつらくはないけど特異個体は狩ってて面白いのでそれなりに。
最近は匠・攻撃大・見切り+3が基本線で、そこから如何に上積みしていくかというあたりに到達。風圧不要なら匠大四、耳栓も不要なら匠特四くらいまでは行くんだけど…次の祭までに麻痺剣も組み込んでかないと、だなあ。
2011年09月13日
2011年09月11日
MHF360(21)
HR656, SR片手剣213。
ようやく炎妃剣【偏愛】完成。
炎妃龍素材より鋼龍素材のほうが重いというトンデモ設定ェ…。
これ作るために陽光石全部使い切っちゃったな。補充しないと。
あと、余った鋼龍討伐の証の使い道がない問題があるw
HR500も超えて今頃何言ってんだテメーという気がしないでもないけど、ほとんど団でしか狩ってなかったのでまあこんなもんでしょ。強化しちゃうと今のSRでは装備できない(リーチが短いので地の型だと戦いづらい)ので、強化するかどうかはもうちょっと考える。まずは火属性攻撃強化装備作らないとな。とりあえず間に合わせでイクスFを中心に組むか、あとで本格的にまた組もう。
入魂はさっぱり進んでないけど、実のところ猟団部屋の2匹目のプーギー服を作るために入魂してるようなもんだしな…
ようやく炎妃剣【偏愛】完成。
炎妃龍素材より鋼龍素材のほうが重いというトンデモ設定ェ…。
これ作るために陽光石全部使い切っちゃったな。補充しないと。
あと、余った鋼龍討伐の証の使い道がない問題があるw
HR500も超えて今頃何言ってんだテメーという気がしないでもないけど、ほとんど団でしか狩ってなかったのでまあこんなもんでしょ。強化しちゃうと今のSRでは装備できない(リーチが短いので地の型だと戦いづらい)ので、強化するかどうかはもうちょっと考える。まずは火属性攻撃強化装備作らないとな。とりあえず間に合わせでイクスFを中心に組むか、あとで本格的にまた組もう。
入魂はさっぱり進んでないけど、実のところ猟団部屋の2匹目のプーギー服を作るために入魂してるようなもんだしな…
2011年09月05日
MHF360(20)
HRは652で片手剣SR209。
300位は行くだろ…って思ってたけど、さっき韋駄天杯(個人)の途中経過見たら6時の集計で303位まで落ちてたので、即席の専用武器作ってタイム出し直しした。3分も縮めたから多分これで大丈夫…だろう…と思う。夕べの集計で安心しなくてよかったわー、14時までだからいくらなんでも、もう安全圏だろう。
ま、スキルは餓狼+2,火事場+2,攻撃大,見切り+3,装填数UP,通常弾強化だからいつもと変わらないし、ティガレックス相手に11分台だから箸にも棒にもかからないとは思うが、どうせ100位より下は300位まで賞品が同じだし、まあいいや。速射の通常弾Lv2を130発くらいだったかな? 繚乱でも300位は出るし、ローゼンズィーゲンなら楽勝。
今回は装備自由で武器だけレアリティ制限なんで、ガンと片手以外は早々にあきらめちまったけど。匠特4火事場餓狼が当たり前の近接部門は俺程度の武具ストックでは無理ゲーw
G装飾品の衝撃再配信は、『蒼き眠鳥の衝撃』『赤影の衝撃』が残ってるなあ。装備は出来てるから単に討伐するだけだけど、今晩明晩でこれを消化しておかないと。時間が余ったら『鋼龍の衝撃』も足しておくか。『棘竜の衝撃』は団員が出てこないし、野良だと死屍累々だし、あきらめるか、という状況。
下位のクエストでゴリゴリ集めればだいたいのものは何とかなるにしても、下位のないエスピナスはなあ…。エスピナス以外は風圧と聴覚保護、それに状態異常対策さえしてれば死ぬような相手ではないなあ。逆にそれができないとアホみたいな難易度だけどな、どうせ下位のクエストはHR100以上のソロプレイヤー救済みたいなもんだし。
300位は行くだろ…って思ってたけど、さっき韋駄天杯(個人)の途中経過見たら6時の集計で303位まで落ちてたので、即席の専用武器作ってタイム出し直しした。3分も縮めたから多分これで大丈夫…だろう…と思う。夕べの集計で安心しなくてよかったわー、14時までだからいくらなんでも、もう安全圏だろう。
ま、スキルは餓狼+2,火事場+2,攻撃大,見切り+3,装填数UP,通常弾強化だからいつもと変わらないし、ティガレックス相手に11分台だから箸にも棒にもかからないとは思うが、どうせ100位より下は300位まで賞品が同じだし、まあいいや。速射の通常弾Lv2を130発くらいだったかな? 繚乱でも300位は出るし、ローゼンズィーゲンなら楽勝。
今回は装備自由で武器だけレアリティ制限なんで、ガンと片手以外は早々にあきらめちまったけど。匠特4火事場餓狼が当たり前の近接部門は俺程度の武具ストックでは無理ゲーw
G装飾品の衝撃再配信は、『蒼き眠鳥の衝撃』『赤影の衝撃』が残ってるなあ。装備は出来てるから単に討伐するだけだけど、今晩明晩でこれを消化しておかないと。時間が余ったら『鋼龍の衝撃』も足しておくか。『棘竜の衝撃』は団員が出てこないし、野良だと死屍累々だし、あきらめるか、という状況。
下位のクエストでゴリゴリ集めればだいたいのものは何とかなるにしても、下位のないエスピナスはなあ…。エスピナス以外は風圧と聴覚保護、それに状態異常対策さえしてれば死ぬような相手ではないなあ。逆にそれができないとアホみたいな難易度だけどな、どうせ下位のクエストはHR100以上のソロプレイヤー救済みたいなもんだし。