2012-02-02
Erlangでのディレクトリ作成、file_lib:ensure_dir/1
ディレクトリがなければ作る、既に存在しても正常動作として、何もしない。
Eshell V5.9 (abort with ^G) 1> filelib:ensure_dir("log"). ok
ok。しかしディレクトリが作成されていないので、log/hoge.logなど開こうとすると死にます。ensure→ok→失敗ってなんじゃい。
2> filelib:ensure_dir("log/"). ok
末尾にスラッシュを付けるのが正解でした。
2012-02-01
ARMORED CORE Vが発売されたので遊んでいた
製品版が出たので遊んでいます。うーん、ソフトウェアもサーバー側も構造は体験版と同じっぽいですね…。(参考:体験版の感想)
既にチームがあるわけでもなし、序盤はつながりにくいことも予想されたので、ソロでストーリーミッションとオーダーミッションを終わらせていました。
シングルプレイ
ストーリーとオーダーで2本のシナリオが別箇に存在するような感じですね。短編集がオーダーミッション、やや長めなのがストーリーミッション。シングルプレイの部分については、オンライン要素の少ないfAよりはボリュームは少ないものの、サブクエストを埋めていく楽しみ・苦しみが残っているので、同じくらいは遊べるのではないかと思います。
対AC戦については、戦闘の速度が下がったおかげで接近戦でとても追えない…なんてことがなくなり、AC4〜fAと比べるとだいぶ簡単になりました。前作では弾速のあるスナイパーライフルで必死に引き撃ちをしていたものですが、今回は近づいて一気にやりあう事のほうが多くなりました。オーバードウェポンや蹴り(ブーストチャージ)の一撃で勝負が決まってしまうケースが増え、また弱点属性を突くとガリガリ削ることができるので、全体的にやや大味な気はしますが、理解できる速度で戦闘が行われるので、前作よりも楽しく遊べたような気がします。前作に対応できたような上級者になると、もしかしたら物足りないかもしれません。
オンライン
これはひどいw 対人戦が成立しやすかった分、体験版のほうがよくできていました。
ネットワーク関係の技術的な未熟さと、人がたくさんいてもマッチングが成立しづらい仕様的な問題が合わさり、とても社会人が平日に出来るようなものではありません。防衛をしない場合は、3時間やって1回できたらいいな、という状態です。防衛戦に出るなら成立さえすれば対人戦ですが、現状防衛戦に出る意味があまりないので、さっぱりバランスがとれていない模様。ただ、仕様よりもエラーで先に進まないことのほうが重大です。
NAT関係はどうなっているのか気になります。「フロムのサーバーを経由しないのでメンテ中でもできます!」という話がされていたフリー対戦のほうは、マッチングできない問題とは無縁のようです。つまりフロムの問題。で、いまさらになってNAT2とかNAT3とか言い出したということは、まさか想定していなかった…?
NAT2や3の分類が詳細に何かは知りませんが、NAT3はおそらくポートが開いていないのでパケットの届かない人でしょう。NAT3だと繋がらないとなると、NAT3は遊べないと公言するか、中継用のサーバーを用意するしかありません。でもまさか、NAT3の人はプレイできません!なんて製品発売後に言うのはありえませんね。CBTの様子は知りませんが、何か考えることはなかったんでしょうか。
中継用のサーバーが弱いだけならば増やせば解決しますが、もし仕様にまったく入っていないまま発売していたらヤバイですね。その場合、中継サーバーを構築して、ソフト側にNATタイプ判定するみたいパッチを作って、配信のための手続き?(よくわからん)を経て…と、時間がかかるかもしれません。
ブリーフィング失敗時のリトライ間隔がやたら短かったり、原因を表すエラーコード等を出力する仕様になっていなかったり、ネットワーク周りの造りに怪しい気配の漂うゲームです。成立すれば快適なのに。
2012-01-24
Windowsメインな人間のための不気味なCygwin環境
Cygwinは便利です。手軽に、Windows付属のコマンドプロンプトよりはずっと便利なCUI環境が手に入ります。Unix系のツールも色々使えます。
Windowsコマンドプロンプト向けのソフトウェアを使う
最近は、ScalaのREPLやErlangのerl、それからWindows用に作ったsbt.batなどでカーソルキーがうまく動作してくれず、困っていました。Cygtermやminttyなどからscreenを起動して、さらにその中でそれらを起動した場合に、カーソルキーで履歴が出るどころか、カーソルがどこかに行ってしまう。コマンドプロンプトからbashなどを起動した場合は問題なかったんですが…
この問題は、シェルの設定等で頑張るのは早々に諦めて、rlwrapというソフトウェアを使うことにより解決しました。Cygwinのsetup.exeからもインストール可能で、ソースコードからのビルドも可能でした。(ビルドにはreadlineやlibncurses-develが必要)
本来は「カーソルキー等で履歴が出る機能のないソフトに対して、それを提供するラッパー」ですが、こいつが入力をうまく捕まえてくれることにより、カーソルキーがあちこちに飛んで行ってしまう現象が防げるようです。
rlwrapをインストール出来たら、あとは rlwrap scala のように使えばOK。いちいち打つのはめんどくさいので、エイリアスを張るなりシェルスクリプトを書くなりしておくと良いのではないでしょうか。
Windowsのアプリケーションを呼び出す
邪道です。きっと意識の高い開発者様方には全力で馬鹿にされるでしょう。
Cygwinからは、Cygwin環境内のアプリケーション以外も呼び出せます。PATHの通っている、notepadやexplorerは余裕。シンボリックリンクを張れば、もっと変なところからも呼び出せます。Windowsのファイル階層は、Cygwin環境からは/cygdrive以下にシンボリックリンクが張られていて、例えば E:\bin\hoge ならば /cygdrive/e/bin/hoge となります。
% ls -l $(which sakura) lrwxrwxrwx 1 moccos None 58 9月 11 00:21 /usr/bin/sakura -> /cygdrive/c/Program Files (x86)/sakura/sakura.exe*
作ったシンボリックリンクは上記のような見た目です。これはきもい。しかし便利。
% vi hoge.c
じゃなくて
% sakura hoge.c &
みたいな。エディタ論争?なんすかそれwww という態度でいきましょう。
Explorerは引数を与えれば、ちゃんとその場所が開きます。今いる場所を開くのが意外と便利。
% explorer .
勿論万能とはいかず、うまくいかないものも勿論あります。ChromeはCygwinから引数としてHTMLファイル名を与えても、うまく開けませんでした。
以上、気持ち悪い作業環境をお勧めしてみました。Unix系のツールとWindowsのGUIツール、両方の良いところを使ってこそのWindows+CUI、でしょう。Unix側で複雑な事をしようとすると、悪いとこ取りになりかねないのが難点ではありますが。
2012-01-22
ARMORED CORE V 体験版 (1/21-22 オンラインプレイ解放) 遊んでみた
発売の4か月ずれこんだアーマードコアV。発売日前の最後の週末、体験版がオンライン部分を遊べるようになりました。まとまりがありませんが、状況や感想の記録です。
サーバーが耐えられず
サービス開始直後にログインが集中して重い、くらいは想定していましたが、マッチングが何度も失敗するとは。サーバーも何度も落ちたり、メンテナンスしたり。人口の差か、XBox版は「たまに失敗する」程度で済みましたが、PS3版は壊滅していました。
発売後はきっと、お試しプレイヤーに耐える程度の体験版サーバーが、製品用と別に用意されるのでしょう。その構成のまま体験版を公開し、製品版より高い負荷が体験サーバーに一気にかかったので、耐えられなかったのかもしれませんね。好意的に捉えるならば。体験版だと2エリアに全員が集中していましたが、エリア毎に個別のサーバーを用意する構成ならば、製品版ではエリア分散の効果も期待できるかもしれません!
…と考えることにしましょう。
戦闘は素晴らしい
パーツを選んで自分の機体を作り上げていく部分と、AC同士の戦闘部分。ゲームのコアであるこれらの部分の挙動は、非常によくできていました。AC4系ほどではないといえ結構な速度で動いているのに、ほとんどラグを感じさせず、素晴らしい出来です。それだけに、肝心の戦闘に入れなくて評価が下がるのは勿体ない。
操作は4系とかなり変わってる
ブーストを適宜OFFにしないと、シャープな動作が出来なくなっています。ONだと惰性でふわーっと動いていってしまうし、クイックターンも出来ません。ジャンプ時のオートブーストをOFFにしたほうが完璧な制御が出来るでしょうが、ONにすると、焦って敵前でブーストOFFのまま慌てているうちに蜂の巣にされる…なんてことは減るでしょう。
4系じゃQBをばんばんふかして戦闘出来ましたが、Vではすぐ息切れします。思考を変える必要がありますね。
キー配置
細かい設定は人によりけりだと思いますが、これデフォルト配置はきつくないですか。ジャンプ・ハイブースト・スキャンモードあたりを押しやすい配置にしたいところです。ACV持ちなんてのも開発されていますが、とにかく何かしらの工夫が必要です。
UI(特にテキストチャット)
テキストチャットのインタフェースは最悪でした。現状のテキストチャットでは、ログが残らない上に発言窓もすぐ消えてしまうため、3秒くらい目を離すとアウト。しかも、フリーテキスト入力中は他人の発言が見えない、という残念な出来です。
オペレーターをやるためにはボイスチャットが必須なので、普段の会話もそれでやれってことかもしれませんが、チャットも3秒消滅テキストも、常時画面の前に張り付いていないといけません。オンラインゲームって、戦闘中以外はそこまで張り付かないよ…
侵攻時の対人戦
マッチングで悩ましいのが、侵攻時には対人戦とNPC戦とを選べないこと。傭兵で参加するときも、ただの単純作業(ヘリや砲台破壊)だと、時間もったいない感があります。
それと逆に、オンラインで一人でもポイントを稼いでおくことが出来ます、みたいな話があったような気がしたけども、現状では時々対人戦になってしまいます。数で囲まれては辛いし、毎回傭兵そろえていくとやっぱり、単純作業だったときに残念な感じに。
ネットワーク設定
公式に、NAT関係の説明がようやく出ました。これ、CBTのときはちゃんと掲示していたのでしょうか?Twitterを見ていると「久々にACシリーズをプレイした」みたいな復活組も結構いたようです。リアルタイムのオンラインアクションゲームが初で、設定がされていない人も結構いるのでは?
http://www.armoredcore.net/players/acv/2012/01/23/976
NATタイプを確認してください、だけじゃなくて、ポートの解放周りの情報リンクを用意するべきだと思いますが、それの質問がフロムに行っても大変なだけなので、繊細な問題ではあります。方法教えてください!とか言われても、製品や家庭環境ごとに全く異なってくるので、がんばれ!としか言いようがないです。
このときに使用されるPlayStation®Networkサーバーのポート番号は、TCP : 80, 443, 3478, 3479, 3480, 5223, 8080 および UDP : 3478, 3479です。
また、AVチャットや、オンラインゲームでの通信対戦では、他のPS3™との直接通信が行われます。このときに使用されるポート番号は、UDP : 3658です。ただし、NATルーターを経由して接続している場合は、異なるポート番号を使用することがあります。
参考(XBox360): Xbox LIVE ??p???邽???K?v??l?b?g???[?N??|?[?g??????
ポート 88 (UDP)
ポート 80 (TCP)
80番が被っていますが、これは一般的なWebサーバーへのHTTPアクセスに使われるポート番号であって、これや443(HTTPS)が内側→外側へ通らないネットワークはめったにないでしょう。通らなかったらInternetがほとんど見られないはずです。逆に、これらがInternet側から家庭内に通るような設定を前提に作ってあることもないでしょう。Webサーバー狙いの変なパケットが来る可能性も十分あるので、お勧めもしません。おそらく、家庭→PSNやLIVE側に対するアクセスに使っているのではないか、と思います。
それ以外のポート設定はしておくとよさそうです。
総括
サーバーに不安はあれど、過去作にフルプライス(6000円〜)出していた「もとからのファン」ならば、十分元を取って楽しめるものだと思います。
コンパイラ実装会 (1)に参加した #cmpimpl
いつのまにか上層をいじる人がエンジニアとカッコよく名乗るようになり、どちらかというとエンジニアっぽかった低レイヤの仕事が地味になっている昨今、こういう集まりは貴重です。なんだこのマニアックな下層の勉強会は!きもい!参加したい!と思うような集まりは大抵七誌(7shi)さんですね!前回のGC勉強会もそうでしたが。ありがたいことです。でも女の子は来ないと思います。
当日の流れ
・集まる
・軽く自己紹介(今日何する、どんな言語使う)
・実装する
・次回の日程調整
・山ちゃん
技術的な会話にTwitterを使っているような人たちとは、自分は普段かなり別方向を向いているので、毎度のことながら浮いてますw
最後に手羽先とアルコールを入れつつ、色々だべれたので良かったかな。
講座的なものは一切なく、各自実装j。使用言語もかなりばらけていました。進み具合も、これから作る人も居れば、既に自分で作っているものの実装を進める人もいるし、字句解析に必死な人もいれば、制御構文の実装に悩む人もあり。
自分はせっかくの機会なので、HaskellのParsecを身に着けていこうと考えています。コンパイラといえば、昔yaccとかlexとかで少しやったような気がしますが、あれと比べると、かなり直感的に書けそうです。ハードルが高かったらParsecは諦めて、次回からC言語かScalaに逃げようかと思っていましたが、このまま行けるかもしれません。
Haskellをさっぱり忘れていたので、そこで結構詰まってしまいました。字句解析の目途がたったので次は出力部分になりますが、ここでもまた詰まりそうな予感がします。まあ、次の一回を使って出力部分の見通しを立てて、その次までに実装対象を決めておいて作り始めるくらいのペースでいきます。今回、次回は人に見せるような成果は出ないでしょう。
次回は2/11(土)とのこと。今回の募集文には「バイナリを出力するコンパイラの実装に挑戦する勉強会」とありましたが、別にバイナリを出力するものに限定という雰囲気ではなさそうです。
2012-01-20
HMDを用いたゲームスタイルの革新(ダメな方向へ)
SonyのHMD、HMZ-T1を購入してから約2か月。最初はPS3に接続して遊んでいましたが、最近はもっぱらVAIOに接続しています。VAIOにはHDMIの出力端子があるので、当然HMZ-T1に出力することも可能なのです。
PCからの映像・音声出力
出力する側からすればただのHDMI機器なので、何事もなく切り替えて出力できます。
HDMIなので音声も出力できます。
プロセッサユニットの電源オンでもHMDの電源が入っていない、いわゆる信号パススルー状態のときは、スルーされた先の機器の性能がPC側に認識されます。うちの場合は、音声出力のないPC用ディスプレイが繋がっているので、音声出力が出来ないものとして扱われました。
ここらのHDMI機器の認識は、出力側PCに依存するところですが、VAIOではここからおもむろにHMDの電源をオンにしても、音声が出てくれませんでした。ちょっと手間ですが、HMDの電源をオンにしたあと、HDMIケーブルを一度抜いて挿しなおすことで、音声出力先として表示されることがわかりました。(この際、何度も抜き差ししていると、HMD側の映像出力がフリーズしてしまうことがたまに…)
屑人間プレイ
このVAIO、当初は布団で寝っころがって作業できたらいいなーと思っていたのですが、どんな姿勢にしても結構疲れるんですよね。顔の向きを画面と同じにしないといけない。でも、HMDならばそんな心配はありません。堂々と寝たままゲームです。
生きてます。
餌をあげないでください。いや、布団から動くのめんどくさいので、誰か餌ください。
本来はヘッドバンド(後方)や耳(側面)などで重さを支えるようにできている製品ですが、寝っころがった場合には額への圧力が大きくなります。額のパーツは元々「当たったときにいたくない」程度の防御性能しかなく不足なので、ハンカチやタオルを挟むのがお勧めです。対策なしでゲームしていると、5〜6時間ほどで頭が痛くてたまらなくなります。
操作系の改善
無線のトラックボールを導入してみました。ゲーム機のようにちゃんとしたコントローラーを接続してもいいのですが、文章を読んだり選択肢を選んだりするだけのゲームならば、これで十分です。
HMDは顔を動かすことにより見る位置を変えられないため、文章ウインドウを読んでいると立ち絵が目に入らないのが、地味な難点ではあります。
トラックボールは、向きを気にしないといけないことがあるので注意が必要です。指で操作する部分の逆側に読み取り用のローラーがありますが、重力によってボールが読み取り部に接触する構造になっていると、上下逆に重力がかかったときにうまく読み取ってくれないんです。タッチパネルで操作するような製品があれば、この点は問題ないかもしれませんね。
「手を放したときに布団の中に紛れ込んでしまい、HMD装着しているので探しづらい」なんて場面が何度かあったので、もしかしたら有線を使ったほうがいいのかもしれません。
布団から右腕だけ出してゲーム中。
布団から腕を出しているのは、布団の中に入れると無線接続が途切れやすいから、という理由もあります。我が家は近隣も含めて電波が混み合っているらしく、PS3のコントローラも無線接続が簡単に切れてしまうんです…。
操作系はこれ一個なので、左右中央のクリック+ホイールだけの製品よりは、余計なボタンがついていてカスタマイズが効く製品がお勧めです。スペースキーやCtrlキーが欲しい場合もあるでしょう。AutoHotKeyを組み合わせてアプリケーションごとに変換をかませば、かなり遊べる幅が広がります。
以上、屑人間スタイルへの案内でした。みんなもおいでよ、こっちの世界に。








