2013年12月22日日曜日

ゴッドイーター2 難易度6 レッドバイキング

ラーヴァナ3体。ハマってる人も結構居るらしい。というネタを見つけたのはもう何週間も前だからもう片付いてるかな?

  1. 3体は、フィールドの3ヶ所 A、B~C、Dに均等に分散してますが、慌てて中央の1体と戦い始めちゃダメです。
    1. 多分、初心者のハマりはソコでしょう。
    2. 下段の通路をそのまま「ジャンプせずに」D側に進みます。
    3. 厳密には中央の1体が進む方向とは逆端の1体を攻めます。
  2. 食事休憩にはCの奥に行きたがりますが、
    1. Cの角あたりで攻撃をブンブン振ると音に反応して振り向きます。
  3. 残り2体になったら、うまく誘導しないと、そろそろ合流されちゃいます。まあ2体ならなんとかなります。

この3体をナチュラルに捌けるようになったら、ゴッドイーター中級と言ってもいいでしょう。ああ、中級ってそんなに難しくないんで。NPCの有無を問いません。連れていけば楽にはなるけど、簡単になるとは限りませんし。

そういやこのステージって、体験版の渦乱の壷に戦い心地が似てるなー。(同時3体、均等配置という辺りが) NPCは深追いしがちなので、慣れてくればソロの方がスムーズかも知れないですね。















LXDEでpcmanfmとサヨナラする方法

linuxmintを暫く使ってたけど、同じlinuxmint同士でもlxdeの方が軽くてイイよね。と暫く使ってますが、
http://ja.wikipedia.org/wiki/LXDE
http://lxde.org/
この標準ファイルマネージャ pcmanfm って奴
(またこの名前が覚えにくくて、何度も間違えるのですが)http://wiki.lxde.org/ja/PCManFM
上のページを見ると色々素晴らしい感じで褒めまくりですが、

これが結構「脆い」んです。何が、って、あるフォルダを開いてる時に、そのフォルダを削除すると、デスクトップマネージャごと居なくなる。死にます。
あまりにもよく死ぬので、別のファイルマネージャに変える方法がないものかと思ったら、ありました。
http://askubuntu.com/questions/155897/how-to-make-nautilus-the-default-file-manager-in-lxde
/etc/xdg/lxsession/LXDE/autostart

を書き換えればいいらしい。
小生はthunarを愛用したいのですが、
コイツはxfce標準のファイルマネージャであるが故にデスクトップ機能を持ってなさげなので、
仕方なくnautilusにします。

python __new__ と __init__ とコンストラクタ

appengineで__new__がどうたらこうたらというエラーに遭遇したので、今更調べてみました。
classの再定義(Typeオブジェクトの上書き)だけでもやっていけてしまいますしね。

端的に言うと、

__new__ は、オブジェクト生成直前に呼ばれる

__init__ は、オブジェクト生成後の初期化

ということらしい。

本来の「オブジェクト指向」「コンストラクタ」はメモリ確保そのものも含みますが、

http://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)

http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF

日本に蔓延している「オブジェクト指向っぽい何か」は
「Java系オブジェクト指向実装」を源流とするもので、
あの界隈では真のコンストラクトはコンパイラの仕事で、
「コンストラクタ」と呼ばれる機構には、初期化の役目しか残ってません。

故に、少なくとも日本語圏で、
__init__をコンストラクタと呼んでしまう風潮は間違ってはいないでしょう。

以前、「pythonにはnew演算子が無い」というエントリを書きましたが、
これはその延長線上(もしくはそれを遡った根っこ)にあるものですね。

pythonでは、クラス宣言=Typeオブジェクトの生成 であり、
本来の意味でのコンストラクタは、Type.__call__が隠蔽しています。
ということが多分、この辺りに書いてある?
https://github.com/python-git/python/blob/master/Objects/typeobject.c#720

__init__を呼んでるのは、実はobject.__new__の機能だったりするので、
__new__初心者はそこでハマるらしい。
http://stackoverflow.com/questions/9367126/why-is-init-not-called-after-new-sometimes

問題の__new__ですが、慣れるより見習え!、ということで、色々ソースを捜索しました。
google_appengine_SDKはpython達人実装の宝庫です。

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/db/djangoforms.py#714

基底クラスの「亜種」を動的に作るのに使ってる場合が多いみたいですね。

とはいえ、python2.4以前では、似たような機構を__metaclass__でやってたらしい。

http://docs.python.jp/2.4/ref/metaclasses.html

python-SDKでもそっちの方の印象が強いです。Modelクラスの小細工に使っていたような。

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/db/__init__.py#798

意味は未だに判らない。__new__の方が機構的に「初心者向け」でしょうか。

PHPとかだとevalで強引に出来なくもありませんが、C#/Java族だと逆立ちしても無理ですね。

2013年12月21日土曜日

Google Appengine の Master/SlaveからHRD移行

久しぶりに仕事ネタです。最近出稼ぎばかりなので。

顧客に使ってもらってるAppengineが何か最近重い気がするので、今更High Replicationに移行することにしました。
そうです。割と最近までMaster/Slaveだったのです。

結論から言うと、移行自体は最近ようやく落ち着きましたが、結構渋いトラブルに見舞われました。

  1. データモデルに一部PolyModelを使ってるのだが、外部レコード参照で仕方なくkey()を使っていた
  2. Migration Toolを使って、稼働中にデータ転送を試してみたが、
    1. コピー自体は一瞬でした。DataStore Staticsticsで見ると、339MB。この程度だと速いみたいですね。
    2. 元サーバのdatastoreをreadonlyにして「ない」場合も一応コピーは出来ますが、Launch Incremental Copyを押せば、何度もリトライしてくれます。
    3. RevertとFinishの意味を勘違いして、Finishを押してしまった。
      1. RevertじゃなくてAbortとか書いてほしい。
      2. Finishは「データ転送を完了ってことにしていいよ」で、次に進んじゃいます。
    4. なんとDNSも書き換わって、旧URLで新URLで接続してくれてしまうことに。
      1. 最悪、remote_apiでデータ運べばいいかと思っていたので泡食いました。
  3. 仕方なく、新URLで確認すると、
    1. データ表示がうまくいかないので、データ移行が失敗してたのかと思ったけどそうではなく、
    2. 前述のキー値が書き換わってないので、旧サーバにデータを取りにいってエラーで落ちてたらしい。
      1. django templateの奥で死んでいたので、シレっと処理はつづく。結果、空表示が続くことに。
      2. ※Model.key()ってワールドユニークだったのね。
      3. ReferencePropertyにしてるカラムは、全て、コピー先でも参照できてます。ちゃんと書き換えてくれてるらしい。
    3. 仕方ないので、スクリプトをグルグル回して、key()の書き変えをすることに。
      1. そしたら今度は、開発初期のゴミデータで、classプロパティが壊れてるレコードがあり、そこで引っかかってスクリプトが回らない。
        1. 厳密にはPolyModelのロードで、変なクラスを探そうとして死ぬ。
      2. 仕方ないので、それ以外を避けて修復。
  4. はー。やっと一段落
  5. ついでにruntimeをpython25からpython27に変えてみようか。
    1. バージョンをずらしてupdate掛けてみたら、なんと旧バージョンが動かなくなった。
    2. ログを確認すると、見たこともないエラーが
      1. AttributeError: class Reference has no attribute '__new__'
      2. python25プログラムから、python27ランタイムを呼んじゃってる気配。
    3. runtimeバージョンは、サーバ全体で共通設定らしい。
8割がた小生のミスです。恥さらしもいいとこですが、他に困ってる人の助けにでもなれば。

とりあえず心に刻んだのは

  • PolyModelは辞めよう。小生には使いこなせない
  • Model.key()を直接扱うのは辞めよう。
  • 同一アプリケーションに、複数バージョンのpython runtimeは混在できない。


2013年12月14日土曜日

ゴッドイーター2(無印) ギルバート キャラエピソードの傾向と対策

ギルバート キャラエピソードは、1回分の感応波受容体を作ってくれるのはイイんですが、素材の入手方法がど忘れする(特に夜叉乱糸)のでメモります。夜叉乱糸を取ろうとしてラージャ狩っちゃうんですよね。だって名前からしてそんな感じだったじゃないですか。

個々のコストは、アップデート前(1.00)のものです。

今(2015年2月)発売中のレイジバーストは、ギルバートと要求する素材もかなり入手しやすいものに変わっています。そもそも複合コア廃止になってるという ...

  • 低密度感応波受容体 = 低密度複合コアx3 = コスト25x3 = 75
    • 夜叉兜片 ヤクシャ
    • 鳥神腱 シユウ
  • 高密度感応波受容体 = 高密度複合コアx3 = コスト:50 x 3 = 150
    • 堕鳥翼 シユウ雷
    • 雷砲体 ザイゴート雷 OR コクーンメイデン雷
    • 氷砲体 ザイゴート氷 OR コクーンメイデン氷
  • 超密度感応波受容体 = 超密度複合コアx3 = コスト:85 x 3 = 255
    • 獣神雷牙 ヴァジュラ
    • 夜叉乱糸 ヤクシャ 難易度7以上 OR 夜叉糸x10
    • 女王牙 プリティヴィマータ 難易度7以上
自前でシロガネを作りまくるとすれば、感応波受容体を作る必要がありますが、計算してみると凄まじい量のコストが必要なので、「1周め」で作るなら1系統に絞った方がいいんじゃないでしょうか。ギルバートにお願いした方が遥に安上がりなんで。

それにしても、そんなにレアでもない素材から、こんなに高コストな素材を作っちまうとは、ギル君にこんな才能があったなんて、じゃなくて、「1周めで装備揃えたがりの方々のための稼ぎ要素」ってところでしょうか。

2013年12月12日木曜日

USB3.0対応の3ポートハブ+ギガビットLANアダプター

久しぶりの周辺機器ネタです。買ったのはだいぶ前でしたが。



上海問屋の店舗で買いました。モノはこれです。
http://www.donya.jp/item/25847.html

うまくいけば便利かも知れない(人柱魂)ので買いましたが、フツーに直輸入系製品みたいです。
http://usb.brando.com/unitek-usb-3-0-3-port-hub-with-gigabit-lan-adapter_p03283c039d015.htmlhttp://www.unitek-products.com/en/product_detail.php?id=253

現在運用中のノートでは内蔵ネットワークポートが認識してないので、仕方なくUSB2ネットワークアダプタを使っていたのですが、USB3ハブ経由だったのでネットワーク側の性能よりも、ひょっとしてUSB3ハブの他の周辺機器の足引っ張ってないだろうか、と心配はしてたんですよね。実際なんかたまに切れるし。

linuxmintで当然のごとく?認識しなくて、とりあえずただのHUBとして使ってましたが、更にもともと使ってたUSB2ネットワークアダプタを使ってましたが、なんかコレ屈辱技っぽい。
付属CDを思いだして中をみたら、ドライバのソースが入ってました。

AX88179_178A_LINUX_DRIVER_v1.4.0_SOURCE で ax88179_178a.ko が出来上がります。

MODULE_AUTHOR("David Hollis");
MODULE_DESCRIPTION("ASIX AX88179_178A based USB 2.0/3.0 Gigabit Ethernet Devices");MODULE_LICENSE("GPL");

2013年11月29日金曜日

ゴッドイーター2 2周めあるいは2キャラめプラン

とりあえずPSPバーストのセーブデータを引っ張り出して2キャラめ作りました。ええ、もちろん何の得もありませんよ。 ああ、あるじゃないですか。キャラクタエピソードをまた堪能できる ハルオミさんが連れてきた特殊NPCと共闘できるっていうメリットが。 ちなみにセーブデータはあと3個あります。
  • 武器はどうしようか
    • クロガネONLYで行くと非常に楽らしい
    • シロガネ装備はかなり強いらしい
    • 2周目であれば、別系統の武器を使い込んでみるのも手
  • BURSTからの引き継ぎプラン
    • 個人的感想では、RANK4、RANK8あたりの武器を引き継ぐと楽かもしれない。
      • 今回はコレです
    • 全部引き継げるわけではないので、「引き継がない」ってのも手。
    • 些細なことながら、引き継ぐとデータベースの人物欄に、BURSTキャラの名前が載ります。
  • キャラクタエピソード ※12/18のアップデートで見直せるようになるらしい。http://www.4gamer.net/games/185/G018514/20131129020/ そりゃそうデスヨ
    • 最優先
      • ハルオミ ※カノンならそこに居るぜ
      • エミール ※よし殴ろう
      • シエル ※ブラッドバレット運用が楽になるので
      • ギルバート ※シロガネで行くなら必須
      • リッカ ※リンクサポートを使うなら
    • 単純に戦力として
      • ナナ
      • ソーマ
      • リンドウ
      • アリサ
ところで、キャリーユーさんとかイネスさんとか、バスターカノンさんとか、DLCで出してくれないだろうか。これ「出たら買う」って人多いと思いますよ。