/ 最近 .rdf 追記 設定 本棚

脳log[2014-10-17~]



2014年10月17日 (金) 復刊というとちょっともにょる。今度出たのはシリーズ3作目で完全な新作です(たぶん)。「カーリー復刊によせて - Togetterまとめ」■20110803, 20121025


2014年10月16日 (木)

最終更新: 2014-10-17T00:06+0900

gdipp_loader_32.exe

以前書いた不満を解消するべく慣れないことをした。

gdipp_loader_32.exeが、引数として与えられたプロセスが終了するまで終了しなくなってる。WaitForSingleObject(pi.hProcess, INFINITE);してるんだから必要なことなんだろうけど残念。

gdipp_loader_32.exeは第一引数(任意の exeファイル名)のディレクトリをカレントにして exeを起動するけど、そのせいで exeに渡される二番目以降の引数が相対パスだったときにファイルを見つけられない。例えば

検索しもってちなみにたどり着いた手順。

  1. >SetEnv.Cmd
    >dumpbin /all /disasm gidpp_loader_32.exe
  2. 出力を読む。CreateProcessW関数は KERNEL32.DLLからインポートする関数として3番目に列挙されていて、KERNEL32.DLLの Import Address Tableの位置は 408000となっているので、408000,408004,408008,...の3番目(408008)を覚えておく。
  3. 出力を読む。コードは .textセクションに含まれている。/disasmオプションを付けたのでニーモニックで読める。さっき覚えておいた 408008で検索すると次の行(だけ)がヒットした。

    004010B3: FF 15 08 80 40 00  call        dword ptr ds:[00408008h]

    呼び出し規約の違いは知らないが、callにそなえて末尾の引数から順番に pushしてるぽいところから推測する。

    CreateProcessW(argv[0], lpCmdLine, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, working_dir, &si, &pi);
    004010B2: 52                 push        edx
    00401094: 8D 8D F4 FD FF FF  lea         ecx,[ebp+FFFFFDF4h]
    0040109A: 51                 push        ecx (これがきっと working_dirに違いない)
    0040109B: 6A 00              push        0  (NULL)
    0040109D: 6A 04              push        4  (たぶん CREATE_SUSPENDED)
    0040109F: 6A 00              push        0  (FALSE)
    004010A1: 6A 00              push        0  (NULL)
    004010A3: 6A 00              push        0  (NULL)

    51(push ecx)を 6A 00(push 0)に書き替えることはサイズが違ってできないので、その前の準備段階を含めた 8D 8D F4 FD FF FF 51(lea ecx,[ebp+FFFFFDF4h]; push ecx)を 90 90 90 90 90 6A 00(NOP;NOP;NOP;NOP;NOP; push 0)に書き替えることにする。

  4. 書き替える範囲は 00401094からの7バイトだが Stirlingで開いた gdipp_loader_32.exeにそんなアドレスはない。dumpbinが出力した .textセクションの情報を見る。

    68EA virtual size
    1000 virtual address (00401000 to 004078E9)
    6A00 size of raw data
     400 file pointer to raw data (00000400 to 00006DFF)

    virtual sizeと size of raw dataの微妙な違いが気になるが、00401094-00401000+00000400 = 494のアドレスを Stirlingで表示すると目当てのバイト列があったので書き替えた。

  5. 同じ要領で WaitForSingleObjectの呼び出しも 90(NOP)で塗り潰した。

すごく時間がかかった。『解析魔法少女美咲ちゃん』を参考にしようとしたが、丁度いいところで OllyDbg便利そうということしかわからなかった。済んでしまえばこの程度のことなのでバイナリエディタだけでなんとかしたいが、PEヘッダとインポート情報を読んでアドレスを変換するのが果てしなく面倒で、また、間違えやすい。アドレスもそこから読み取る値も同じバイト列だからか、すぐに区別がつかなくなる。

ちなみに 最初の検索ワードが「disasm」で次が「ディスアセンブラ」それから「逆アセンブラ」「Ordinal Hint」「インポートテーブル」「dumpbin」と変わっていった。並行して、eXeScopeを実行したり bcc55と VCの binディレクトリに dasm.exeみたいな名前(※ildasmからの類推)のファイルを探したりしていた。tdump.exe / dumpbin.exeがそうだとは気付かなかった。


2014年10月15日 (水) [Vista] Windows Updateって、通知領域のバルーンからウィンドウを表示したか、スタートメニューから起動したかを区別していて、ダウンロード開始後に自動で通知領域に帰っていくかそのままデスクトップに留まるかを決めてる。細かい仕事してんな(ほめてる)。


2014年10月13日 (月) 絶対に読まないのにとりあえず原著英訳本をウィッシュリストに入れておいた本の翻訳が年末に出るらしい。「ピケティ『21世紀の資本』サポートサイトその他 - 山形浩生 の「経済のトリセツ」」こんなに早く日本語で読めるなんて幸せだなあ。文字をなぞることはできても理解できない可能性についてはおいておいて。


2014年10月08日 (水) 昨日あたりほぼ満月だと思ったのに今日は半分しかない。俺の半月(はんつき)はどこへ行ってしまったんだ、と損した気分でいたのだけど、どうやら皆既月食の途中だったらしい。そういえば複数の親子連れが同じ方向の空を眺めていた。なーんだそういうことか、ってそれはそれでもったいないことをした。■満ちて欠けるまでが1周期だったら、失ったはずのものは半月でなく四半月だったか。


2014年10月04日 (土) (がえん)じる。肯ずる。■ふと思いついて(思い出して) ATOKで変換してみたら変換できた。これは音便形。■否定の助動詞が含まれていて元は否定の意味なのだがその後肯定の意味で使われるようになったとか。なにそれ困る。■■■@2014-12-10 谷崎潤一郎の『細雪』で使われていた。肯じるをさらに否定していたから肯定の意味で使ってるんだろうな。


2014年10月03日 (金) 鉄板で高評価の『戦場のヴァルキュリア』。なるほどうなずける。■キャラがいい。乳の形がいい(アリシアとセルベリア)。6年前のゲームだというのに古びない水彩画風の画面描画がいい(輪郭の処理があまいけど)。歩兵の歩く音をはじめ様々な擬音が見えるという脱力演出がいい。従来隠しパラメータで表現されていた高低差や地形の有利不利が3D化されて見えるというのがいい。物理エンジンだから基本的に見えている通りのことが起こる。すべてのキャラを動かさなければいけなかったり、移動の後でなければ攻撃できなかったり(またその逆も)しないのがいい。省力化の意味もあるのかもしれないけど、様々な割り切りが煩雑な作業を省いていて評価を下げる理由になっていない(だがモーションくらいは……)。■アリシアの声が南夏奈だから真面目なことを言っていても後ろを向いて舌を出していそうで笑いがこみあげてきて困る。敵方にはxxxHOLiCのコンビが主従を入れ替えて声をあててる。次元の魔女がこちらでは蒼の魔女。あと上官は草薙素子。■フリーバトルに精を出すと無双ゲームになってしまうと読んだので制限プレイをしてる。どこまで続けられるやら。1)武器開発をしない。2)防具開発をしない。3)オーダーを使わない。4)遊撃戦闘(=フリーバトル=経験値と資金稼ぎ)をしない。5)索敵ラインに頼らない(のは毎回毎回毎回毎回消すのが面倒で諦めた)。では何ができるのかというと、レベルアップと戦車の強化ができる。経験値稼ぎができないから Sランクで最大限のボーナスを得るのが重要。■2番目のマップで早々に初の敗北を喫した。偵察兵と支援兵は戦車や突撃兵のそばを走り抜けようとするだけで HPを全部持っていかれて死ぬ。安全地帯から安全地帯へ走る。ぼさっとしてると際限なく撃たれる。銃を構えるまでの待ち時間がけっこう痛いので、旋回・蛇行するか物陰でやりすごしてリロードを待つ。なんか当たり前のことを書いてるな。当たり前が当たり前に要求されている。弾丸をビシビシ食らっても動けるとか、拠点から拠点にワープできるのがゲーム的。初期に出番のない支援兵や足の遅い対戦車兵は占拠した敵拠点で呼び出すのがいい。初期配置は回復CP数を増やすキャラと敵拠点を奪うのに必要な最低人員だけ。突撃兵に狙われるとほぼ死ぬので、それよりは拠点を通して一時撤退しておいてダメージを受けないようにする。再度出てくるのに 1CPと 1ターン必要だけど HP全快でどの自拠点からでも出てこられるメリットがある。自分のターンはもちろんだが敵のターンでも攻撃することを考える。勝利条件に関わらないなら経験値にならない一般兵の相手をする積極的な理由はない。■■■「戦場のヴァルキュリア評(考?)」■2周目について。たしかにブック形式をいかして最初からすべての章にアクセスしたかった。サガフロ2がそうだったみたいに。また、レベルなど多くの要素が持ち越されることに関して、むしろ、成長要素や便利コマンドを廃した弱弱ニューゲームの方が楽しめたろう。べつに敵司令官が目的を持ってなくてもパズルゲームになっていても構わない(だって敵が CPをフル活用して対戦車兵ひとりで一点突破を仕掛けてきたらハメ殺されたみたいないらだちを感じる。自分はやるけど。不満の原因はおそらく、ウェルキンの死が自軍の潰走につながる説得力がないから。本当の司令官はプレイヤーだから。そこを物語に織り込んで初めて敵AIが本領を発揮できるのではないかと)。仕様の穴をつくようなテクニックが要求される「無理ゲーだと思った?クリアできるんだぜ、これ」みたいなのが見たかった。1周目が接待ゲームに思えてくるようなものが。■■■アマゾンのカスタマーレビューを読んでると戦争なのにノリが軽すぎるという評がいくつも。ラブ展開は不謹慎だとかも。俺は戦争を知らないけど、常と変わらないことと極限状態だから起こることのどちらもがあるだろう。どちらの評にも共感しないし、不謹慎厨の同調圧力には嫌悪を感じる。最近になってやっと気がついたのだけど、警察ってのが一番、積極的に空気を利用して多数派の論理を押しつけてくる旧時代の暴力組織なんだよね。そんな風にして維持される治安はいらないかなあ。


2014年09月24日 (水)

最終更新: 2015-01-12T01:26+0900

Go言語をインストールした。

ifが値を返さないとか条件演算子がないとか*、エラーを nilと比較することはできるけど || や && のオペランドにはならないとか、配列の最後の要素の後ろにカンマを置かずに改行するとカンマがないって理由でコンパイルエラーになるとか、ああ、この独善的融通の利かなさ、Rubyではないな googleだから Pythonがこうなのか?という感想。

 beni/lexer/javascript.go (2014-09-24, 4.9KiB)

ベースは /shjs/lang/sh_javascript.js

ミクロな感想

  • gitコマンドがなくて >go get "github.com/..." に失敗した。手コピインストール……
  • golangの regexpパッケージが re2そのままらしくて一番単純な先読みすらサポートされていないので一部のパターンを簡略化した
  • マッチング処理が行ごとではなく全文一括なので改行をまたぐケースをひとつのパターンの中に押し込んでシンプルにした
  • \wとか \sの差異を気にせずそのまま使ってる
  • インポートは lexerディレクトリ丸ごとされてるんだけど、lexer/all.goにファクトリを登録しておかないと有効にはならない
  • JavaScriptの正規表現リテラルが鬼門
  • regexp.MatchStringは文字列の全体をテストするメソッドではない
  • htmlフォーマッタに(未実装だけど)いろいろフラグがある。メソッド内で分岐するのでなく単目的一本道の処理を組み合わせてインターフェイスとフラグを満足するオブジェクトを構成したいと思った。フラグの組み合わせは膨大になる可能性があるので事前に定義したクラスとファクトリ関数は現実的でない。どういう方法があるだろうか。vptrと vtblをカスタムする? 実行時コード生成? たまらんね、他には? Scalaには何か、型付きのダックタイピングをサポートするやり方がなかった? あったとしてそれが解決策かは知らないけど、とにかく、間接レイヤーを挿入して自分でディスパッチしたりするのでなく、たとえそれがソースコード上のことに過ぎなかったとしても、入力と出力を直結して答えを出してる感じが欲しい。
  • 色分け対象となるトークンに、LiteralStringDouble、LiteralStringSingle、LiteralStringHeredocなどが、また、総称的に扱われるのであろう LiteralStringや Literalがある。lexerの方では識別できる限り詳細なトークンを指定したいであろう。では、テーマの方で本質的な差異のないトークンをまとめて同じ色に塗ることにしようか。それを判断するには言語に関する情報が必要だ。
  • 実質的にパターン最初に ^ が必須で、ポインタを1文字ずつ進めながらマッチするパターンを探していくのは
    • regexp.FindStringSubmatchメソッド呼び出しコストがかさむ
    • ^ では、与えられる部分文字列の最初を検出することができても、単語の切れ目(始まり)でない部分を除外することができない。
    • regexpパッケージのメソッド群には検索開始位置/検索終了位置を指定する引数が見当たらない。BMatch関数と同じ不備か?(20090808p03.02)。それがないと結果が変わってきたりする。re2には \K参考 も戻り読みもないけど \b(単語の切れ目)だけは影響しそう。
    • それと「FIXME: need to emit 'ch'?」と書かれている部分とが合わさって、ハイライト対象のどの部分もとりこぼしなく識別してマッチしないと、意図しないマッチが生まれたり対象の一部が(標準)出力から消えたりということが起こる。
    • マッチした位置/未試行/マッチ無しを記憶しておくのが効果的だと思う。(検索開始位置を指定できないと \b のマッチの仕方が不定だけど)

ただのデータファイルなので言語の勉強にはならないよね……。フレイバーの違いライブラリの違いに足を取られるのがわずらわしいしもどかしい。CLRと MSIL?

* つまり、if (cond) return A else return B みたいな冗長性(returnの繰り返し)と無駄な構造化を強制されるわけ。

 何かを true/falseと比較することはもちろん nullと比較することもまずしたことがない。そうする理由は、trueが falseではないすべての値であったりする Cのことや、null(それと NaN)は nullであること/ないことをテストすることはできても二つの nullが同じものであることがありえない SQLのことが念頭にあるからだ。そして、Goだからこういう書き方で OKなんだというような考え方はしない(http://vvvvvv.sakura.ne.jp/ds14050/diary/20140815.html)。信じられない仕様を強制するもんだ。

 なぜ余計な物を強制されるのか。ケツカンマは便利だからと許容されているもの(だが俺は嫌いだ)であって、強制するというならそれは削除させる方向に向かうべきものだ。

参考 [[サクラエディタふぁんくらぶ part14|http://anago.2ch.net/test/read.cgi/software/1294526851/656-663]]


2014年09月20日 (土) [tDiary]「emojify に登録されていないアイコンも変換しようとして 404 となる · Issue #404 · tdiary/tdiary-core · GitHub」「foo::bar::buzz と書いた時に bar が emojify 対象となってしまい、404 アイコンがでるのを直したい」■直したとして意図しない絵文字が出るのを避けることはできない。String#emojifyでざっくり処理する限りは。そして変換対象リストを外部に依存することはさらにコントロールを難しくする。■エラーメッセージを貼ったら100行目のエラーが意図せず100点満点(絵文字)になってしまうのはありっていえばありだけど。■なんにせよ絵文字は dataスキームで埋め込むのがいい。■■■@2014-10-03「Merge pull request #443 from minimum2scp/fix/emojify-404 · 96eff8c · tdiary/tdiary-core · GitHub」■それはurlではなく tag.■String#%の引数の [...]*3 について、プレースホルダを %1$s にすれば 1つの引数を使い回せるのに。


2014年09月18日 (木) これでコア機能がスタンドアロンだったら非常に魅力的。「Kindle Voyage」。300dpi(6インチ・1448x1072)の解像度。左右2対(4個)の機能固定(右綴じ左綴じで進む戻るが入れ替わったりしない)物理ボタン(感圧式。振動でフィードバック。感度振動ともに微調整可能。調整が必要な(そしてベストセッティングが存在しないかもしれない)扱いにくいボタンなのか?エレベーターにクリック感皆無の凹型ボタンあるね。無駄に強く押してしまうからなのか、たいがいボタン裏側のひびが透けて見えている。疑似ボタン以上のものになっているかは触ってみないと)。■PDFが手軽に読めたらいいのだけど……。「Microsoft Word(DOC, DOCX)、PDF、HTML、TXT、RTF、JPEG、GIF、PNG、BMP、PRCおよびMOBIファイルをKindleに送信して、Kindleフォーマットで読むことができます。これらのドキュメントは、メモ、ハイライト、ブックマークを追加したり、Whispersyncテクノロジーによって複数の端末間で前回読んでいたページを同期することもできます。メモ、ハイライト、ブックマーク、前回読んでいたページの同期は、Kindleフォーマットでクラウドに格納したパーソナル・ドキュメントでのみ利用できます。PDFおよびTXTフォーマットのドキュメントは、そのままの形式で読むこともできます。」そのままの形式って(じか)にコピーして読めるってこと?■買わない理由はなんだろう。黒色だけ。丸っこいだけの幼稚な()造形。記憶領域が内蔵4GBメモリだけ。ガラス越しの仮想紙面。早すぎるスリープ(数分後)。眼前でちらちらうっとうしいであろう明るさ自動調整はオフにできるから問題なし(好みを学習するとか暗順応に対応するとか、考えは間違ってないしちょっと興味はあるが、試みが成功しているかどうか。俺は小賢しい機械を憎んでいる)。あとは……kindleであること?■■■@2014-09-19「EBook2.0 Magazine – Kindle Voyageとデジタル読書体験の新段階」背面はマグネシウムだって。これはプラス材料。そして評価保留中のボタンについても「PagePressは、ユーザーによるフィードバックと地道な実験の繰り返しによる成果だ」そうなので期待が増す。最近2台目の PRS-650を買った俺には不要だけど。


2014年09月14日 (日)

最終更新: 2014-09-20T17:08+0900

にゃんころりん

最近撮ったのでもない画像を今日アップロードする理由。

俺が座椅子に横になって本*を読み始めると、ベッドの上で丸くなったり伸びたりしていてもすぐに起き上がっていそいそと近づいてきて脇(座椅子の上だから狭い!夏は暑い!)に居場所を要求してきた。一昨日(おととい)にはもう階段もベッドにものぼれなくなっていたけど、座椅子にはやはり乗っかってきた。まんまと、まんまと誘いこまれてやんの。それでこそ二階から下ろしてきて待ち構えていたかいがあるってもんだ。もっとも、しつこく手招きしていると膝の上でしばらくお愛想したあとでタッと何の未練も感じさせずに去っていく付き合いのいいにゃんこのことなので、まんまとのせられているのがどちらかわかったものではないが。

* もちろん Sony Reader (PRS-650)。小さい本は全部自炊して捨ててしまってるし、大きい本をあお向きで読むのは腕がだるい。


2014年09月11日 (木) 「ドラッグ(空気抵抗)を7%も軽減できる」らしいです。「ロードバイク乗りがスネ毛を剃ることで生まれていた最大のメリットとは? - GIGAZINE」■しかしタイムを競う立場でない人間からすると夏に裾をまくって走ったときのふくらはぎがさわさわと風に撫でられる爽快な感じも大事だと思う。まあつまりこんだけあからさまな抵抗が生じてるってことだ。


2014年09月09日 (火) 参考にしたらしいリンク先でもこのように書いてあったのだが……。「これらの症状は理屈を聞けば分かりやすくて、血液中の糖を腎臓が尿で排泄しようとするから多尿・頻尿になり、」これは理屈ではなく腎臓の擬人化だろうと思うのです。■このことが高校生物のテストに出た。グルコース程度の分子量では腎臓(の糸球体)を素通りして原尿の中に移動する。この余計に存在するグルコースが原尿の浸透圧を上昇させその後の水分の再吸収を妨げるから尿の量が増える(のではないか)、と書いて○をもらった。そんなん知らんわ聞いてない、と諦めかけたのだけど、手持ちの知識(授業で聞いた腎臓の仕組み)で解けるはずの問題であるなら他にないだろうと。■検索して仕入れた用語。浸透圧利尿。