cookies.txt      .scr

ただのテキストファイルのようだ

webrick/httpproxyのだいたいの流れ

日を改めるごとに忘れて1から読み始めてるので、メモ。

  • webrick/server GenericServer
    • #start -> #start_thread -> #run(abstract*1 )
  • webrick/httpserver HTTPServer < GenericServer
    • #run -> #service(overrided)
  • webrick/httpproxy HTTPProxyServer < HTTPServer
    • #service -> #proxy_service -> #do_(GET|POST..) -> #perform_proxy_request->
    • (#setup_proxy_header ; Net::HTTP.start -> yield*2 -> Net::HTTP#request)

終わり。

*1:@logger.fatalで、抽象メソッドが呼ばれたことを報告。

*2:perform_proxy_requestへの&block

オリジナルファイルと別名でtar archive作るとき

./dir/hogeというファイルがあって、これをtarで固める。

% find dir
dir
dir/hoge
% tar zcf out.tgz dir
% tar tf out.tgz
dir/
dir/hoge

(あまりないかもしれないけど)このhogeを、そのままの名前でなくて別名でアーカイブしたいとき。
一時的に、直接hogeをリネームしてもいいんだけど、いろんな理由でリネームをしたくない時がある。
そんなとき

% mkdir sym
% cd sym && ln -s ../dir/* .
% mv hoge fuga
% cd ..
% tar zchf out.tgz sym
% rm -r sym
% tar zxf out.tgz
% cd sym && ls -l | cut -d' ' -f1
合計
-rw-r--r--

という感じ。

要は別ディレクトリから元ファイルにシンボリックリンク張って、そのリンクのファイル名を変えよう、ということ。
だけど、そのままアーカイブするとリンク情報がそのままアーカイブされてしまうので、tarのオプションに'-h'(--dereference)を付けてシンボリックリンクを辿らせる。

もちろん元々別にシンボリックリンクをアーカイブしたかったのだったらできない。ハードリンクでも張って--hard-dereference付けてもよいけれど。

gccでinline assemblyしたとき

インラインアセンブラ - falcon071011.log
http://falcon071011.com/2013/10/20/inline-assembler/
にて提起されたことについて。

エラーに出ているような行はインラインアセンブラ中に見当たらないし、書いたとこ以外でエラーしてると見える。
一応試してみたが、

__asm__ (".intel_syntax noprefix");

で全く同じエラーが出た。(movlっておいしいの?)

エラーメッセージから/tmp以下にランダムな名前でアセンブラファイルを作り、アセンブルしていることが読み取れる。
実際に読んでみると、

$ cat /tmp/cc2jgZsM.s
        .file   "a.c"
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
#APP
# 2 "a.c" 1
        .intel_syntax noprefix
# 0 "" 2
#NO_APP
        movl    $0, %eax
        popq    %rbp
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (GNU) 4.8.1 20130725 (prerelease)"
        .section        .note.GNU-stack,"",@progbits

そんな気はしていたが、インラインアセンブラは型にはめているだけ。
で、オプションで.intel_syntaxとかつけちゃっているから、はまっている型の部分でエラーが出るよね、ということ。

ちなみに -masm=intelをつけると

        .file   "a.c"
        .intel_syntax noprefix
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        push    rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        mov     rbp, rsp
        .cfi_def_cfa_register 6
#APP
# 2 "a.c" 1
        .intel_syntax noprefix
# 0 "" 2
#NO_APP
        mov     eax, 0
        pop     rbp
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (GNU) 4.8.1 20130725 (prerelease)"
        .section        .note.GNU-stack,"",@progbits

型にちゃんと.intel_syntaxがついているので、わざわざ書く必要はないのかなという感じ。
明示的に示す必要性があるのかないのかはしらないけど。

素直に-masm=intelをつけよう。




追記
とおもったけどよく考えたら、エラーが出ているのは.intel_syntaxの直後で、それ以前のAT&Tのとこではエラーが出ていない。
ということは、syntaxのディレクティブは途中で変更可能ということ。
すなわち、

__asm__ ( ".intel_syntax noprefix;"
"mov eax, 0;"
".att_syntax;"
)

で-masmなしでいけた。

qtbindingsのemitが動かない話

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-linux]
gem 2.1.9
gem-1.9 1.8.23 にて。

http://stackoverflow.com/questions/15583114/qtruby-emit-does-not-work
これ。

ruby2.0では動かないらしいので、ruby1.9で動かしましょうという話。
しかし実際にruby-1.9で動かしてみたら、Segmentaition Fault起こした。ふぇぇ。
rubyが(というかqtbindingsのnativeが)せぐふぉったのを見たのは初めてですね。
qtbindingsの最新版だとダメかな、とか思ってqtbindings 4.6.3.4も試したけどおんなじ。せぐふぉ。
でもemitに関係なくせぐふぉってるので、これはこれでまた別のおかしい状況です。
ちなみにせぐふぉっているのはlibqtruby4shared.soのrb_type()とかいう関数らしい。

ふぇぇ。