/ 最近 .rdf 追記 設定 本棚

脳log[2014-10-21~]



2014年10月21日 (火) String#toLowerCase と String#toUpperCase はブラウザーのロケーション設定がトルコだと正しい結果を返さない」■なんで正しくないって言っちゃうんだろう。たまたま自分が A-Z と a-z を相互変換したかったというだけのことなのに、大文字小文字の概念は単一の言語の専売特許ではなく toLowerCase/toUpperCase はその目的を過不足なく満たす手段ではなかったというだけのことなのに、なんで自分の期待する結果を返さなかったメソッドを間違っていると言っちゃうんだろう。


2014年10月20日 (月) 2006年9月から2010年8月までに製造したルームエアコン室内機および2006年9月から2011年4月までに製造した家庭用空気清浄機(空気清浄機『光クリエール』、加湿機能つき空気清浄機『うるおい光クリエール』、除加湿清浄機『クリアフォース』)について、送風用ファンモータより発煙・発火する事故が発生しております。」■うちのは 2010年製の空気清浄機(加湿機能なし)だったので該当せず。年中つけっぱなしだから発火は怖い。■夏の間は風呂場で手洗いして握って簡易脱水した化繊の(※臭いが移りやすい)下着を風の当たるところにぶら下げておくと一晩で(正確には一晩もかからずに)乾くのが重宝してる。■手袋はこれ(手袋スタンド ハート)の足を本体上面の手がつっこめる穴に差し込むと吹き出し口の上で安定するのでそこを定位置にしてる。■雨が降ると除湿器を併用するけどそれ以外は風があるだけで足りる。もともとほこりっぽい部屋の集塵が目的だったけど、いつでも使える風があるという副次的効果も便利なもの。ダイキンのはそっち方向のアピールが弱いんだけど。


2014年10月19日 (日) 『THE LAST OF US』をプレイしてる。難易度:グラウンドってなんやねん、地べたを這いずる超低難度のイージーモードか?という疑問を残しながら上級をセレクト。$1000たまったので女の子に猫リュックを与えようとしたら難易度:サバイバルをクリアしてないと買えないとか。くっそう。■プレイした感想は、これってバイオハザード?というもの。各種銃器、弾薬制限、工作(調合)、感染、クリーチャー、お供の女の子(たぶんはまり防止役。弾をくれたりする)、あたりの要素がそう思わせるのかも。バイオといっても 2しか知らないが。■「「真のバイオハザード」は伊達じゃない!PS3『The Last of Us』最新プレイムービーが公開!! : ゲームかなー」■システムがすごく快適。オートセーブで、死んでも死んでもだいたい1から数分前から再開できるので、一体明示的なセーブがどういうときに行うものなのかわからない。手に入れたものがその場で1ボタンで確認できる。一本道で一方通行。移動パートとバトルパートがわりにはっきり区別できる。大きな音や画面いっぱいのグロ画像みたいな露骨で陳腐な驚かせ方は狙っていない。■バトルパートが難しい。集まってこられると死ぬ。人間なら背後から近寄って締め落としたり弓矢で静かに一人ずつ消していけばいいんだけど、死体を処理できないからそのうち人が集まってきて囲まれる。ショットガンは撃ち合いに便利だけど、便利だから弾が切れる。感染者は集めて燃やすか爆破すればいいんだけど、火炎瓶も爆弾も3個ずつしか持てなくて頼り切れない。だもんで数が多いとスルーしたくなるんだけど殲滅するまで次の目的地がわからないことが多い。癪なので下げないが難易度は下げられるし(死にまくってると「途中からでも下げられるよ」ってヒントまで出る)、やり直しがスムーズなのでさして不満ではない。■馬を歩かせながら(walk? amble? trot? pace? canter? gallop?)タイミングよく△ボタンを押すと車の上に降りられる。基本的に馬の右に降りるのだが障害物があると左に降りる。歩きながらだとそのまま右に降りる。そうして車の屋根を貫通してお手上げ状態のジョエルが奈落に落ち込んで死ぬ。■■■3日でクリアした。ボス戦の演出が見事だった。これみよがしに床に置かれた割れた皿を踏んだりはしなかったけど。映画だと思えば長さは十分。物語を駆動する装置としてファイアフライを引っぱりすぎた感はある。作中でエリー自身が語ってたように、あいつら各地で死体をさらしてるだけの連中だったもの。脱出シーンはレオンだった。マチルダが一緒だったし視界が転倒しなかったのが違うけど。■テープレコーダーの再生にて、「大脳辺りょく系」。エリーの頭を開こうとしてた医師はとんだモグリだよ。酔っぱらうと表に出てくる部分として一般知識だと思うんだけど>大脳辺縁系。


2014年10月18日 (土) Firefox 33 ベータ版リリースノート」■ひとつだけ気になる。「新機能 JavaScriptの文字列処理が省メモリで高速になりました。(詳細はこちら)」■「こちら」のブログ記事からリンクされてたバグのひとつ>Bug 1008590。struct Atomのポインタメンバがポインタと char配列の unionに変更されてる。■それはそれとして、他の部分、masm. で始まる C++の皮を被ったアセンブリが異質で気になる。このへん(https://github.com/herumi/xbyak/blob/master/sample/bf.cpp)と同じ発想なのかな。さっぱりわからんですよ。


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つの引数を使い回せるのに。