ToDo:
http://www.atdot.net/~ko1/diary/201101.html#d4
まぁこいうのはどこでも時々起きる系なのかなあよく知らんけど
Ruby については ruby-dev は「こわい」という話を ささださんにしたらこわくないよと言われた気がする。 当時もうまく説明できなかったけど、今もよくわからない。 ささださんの書いてる fundamental な人が多いと感じがするというのは、 割とその理由の一つかもしれないけどわからない。
ドキュメントは新しい熱心な人が聞きながら作る、ってのは まぁ一般的によくある話だとなんじゃないかなぁ。 そしてそれでいいんじゃないかなぁと思う。 よくわかってる人が書いたドキュメントって往々にして 新しい人にとって全然便利じゃなかったりするよね…
(23:49)
文字通り一日中ゴルフしてた…
http://www.spoj.pl/SHORTEN/ranks/
とりあえず7位まで。問題多すぎですがな… まぁ codegolf よりは軽い問題が多いのはありがたいか。
トップの人は普通の問題に強烈に強い印象で、 2位の人は bash がおかしいことになってる感じぽい。
しかしなんか bash って使えるコマンド変わってる疑惑があるのがやる気を削がれるが
(01:35)
http://blog.goo.ne.jp/no_orz_no_life/e/e7110098e80d89e28082065d32e9dd6b
の fact とか sum を見てて、 あらなんで3つ式あるのかなーと一瞬思ったんだけど、 まあたぶん末尾再帰の最適化かけたいという話だと思う。
で、そういえば GCC はどのくらい無茶なものを 末尾再帰にしてくれるのかなーとか思って色々やってみたら、 どうもすごく単純な足し算掛け算くらいしかできないぽかった。
まぁそんなもんかーと GCC を見ると、
if (act->add && !a_acc) a_acc = create_tailcall_accumulator ("add_acc", first, integer_zero_node);
if (act->mult && !m_acc) m_acc = create_tailcall_accumulator ("mult_acc", first, integer_one_node);
とかあって、やはり足し算と掛け算だけ特殊処理されてるのかな、 って感じだった。
関数型言語系だと、末尾が cons だった場合なんかにも、 似たような処理をしてやれば ずいぶんと色々とラクになるんじゃないかなぁとか思った。
あと、足し算掛け算以外を色々考えてる間に書いた、
def factdiv(n) if n==1 1.0 else n/factdiv(n-1) end end
というような関数は、 つまり (2*4*8*...)/(1*3*5*...) という感じの値を返すわけだけど、 この値は 1.25 sqrt(N) くらいの数字になるみたいだった。 正確には (1*3*5*7*...)/(2*4*6*...) になってる時は 0.8 sqrt(N) くらいになってるので、この二つを繰り返すというか。
さてこれってなんか今まで見たことあるっけ… どうも見たことない気がするんだけど、 なんか有名な法則とかがありそうではある。
(23:39)
年越す時に書いてたコードは spoj のゴルフだと思う。 たぶん kamil 。 spoj のゴルフはなんかよくわからんくらい短いものが結構あって、 なんか答え埋め込みとかになってるやつもあるのかなぁ。
年明けてからは BF_PRIME で、正月早々 Brainfuck ってのもどうなんですかね… しかもどうも勝てる気配があまりなくてですね…
kinaba さんの書いておられた、 なんかに特化した言語作るってのはいいかもなぁと思ったので、 Brainfuck の短いコードを出力するプログラムに特化した言語というのはどうか…
去年は今一つ、色んなことに慣れすぎてて特に何も無かったなぁ…という感じがした。 そいうことを思いながらはてなとか見てみた。
とかあったんですが、このへんは知ってることまとめたりとかそういうのばっかで、 今一つ新鮮なことではなくて。
というわけで自分的に一番重要だったことは wake は今年作ったんだなぁということな気がする。
あとまぁ後半は Starcraft2 やってたなぁとしか言えないんじゃないかね。
(23:57)
電車の中で暇だったのでだいぶ前に書いてた ld-mach-o を見てた。 クラッシュしてるところはどうも strcmp の中らしい。
gdb の reverse-stepi とかあのへんはじめて使ったけど、 さっさとクラッシュしてるようなケースだと便利だなぁ… と気付いた。 実益ないとバカにしてた record だけど、 まぁなんか使いかたあるかもなぁとか思いはじめてきた。
なかなかクラッシュしてくれないプログラムを考えると、 「クラッシュするちょっと前」を探してそこから record してくれると嬉しい。 しかしこれはどう考えても簡単じゃない。
たぶんタイマーみたいなのを仕込んで、 時々止めてみて rip を記録して、 次回は最後に止まったところで止めて record を仕込んで…とか考える。 ただその止まるようなところはどうせ何度も通るようなパスなんですねー。
はてさて
あと raw_write が TCC で動かないのがムカついたので インラインアセンブラをいじりはじめる。 raw_write は動いた。 r8 から先が全く対応されてないのでなんとかしたい、気がする。
(00:01)
ファイル保存可能問題がふたたび。
どうも /var/lib/php5 と /var/cache/common-lisp-controller が writable だったようだ。
これらはなんか writable であるべきってことで writable ぽいんだけど、 とりあえず hello world くらいなら php も clisp も 755 で動いてやがるので、とりあえずこれでいいかと放置。
問題あればおしえてください
(11:58)
gcc -m32 -fPIC
12: 8d 83 00 00 00 00 lea 0x0(%ebx),%eax 14: R_386_GOTOFF .LC0 18: 89 04 24 mov %eax,(%esp) 1b: e8 fc ff ff ff call 1c <gcc+0x1c> 1c: R_386_PLT32 puts
gcc -m32
6: c7 04 24 00 00 00 00 movl $0x0,(%esp) 9: R_386_32 .rodata.str1.1 d: e8 fc ff ff ff call e <gcc+0xe> e: R_386_PC32 puts
gcc -fPIC
4: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # b <gcc+0xb> 7: R_X86_64_PC32 .LC0+0xfffffffffffffffc b: e8 00 00 00 00 callq 10 <gcc+0x10> c: R_X86_64_PLT32 puts+0xfffffffffffffffc
ここで addend は両方とも -4
gcc
4: bf 00 00 00 00 mov $0x0,%edi 5: R_X86_64_32 .rodata.str1.1 9: e8 00 00 00 00 callq e <gcc+0xe> a: R_X86_64_PC32 puts+0xfffffffffffffffc
addend は後者だけ -4
tcc
b: 48 8d 05 fc ff ff ff lea -0x4(%rip),%rax # e <gcc+0xe> e: R_X86_64_PC32 L.22 12: 48 89 c7 mov %rax,%rdi 15: b8 00 00 00 00 mov $0x0,%eax 1a: e8 fc ff ff ff callq 1b <gcc+0x1b> 1b: R_X86_64_PC32 puts
さて!
とか書いてるうちに気付いたが、 PLT 作った場合に rel->r_addend を足してないってだけの話だこれわ
(16:14)
あたりを修正。 副産物として raw_write.h とかいうのができた
WebKit roll は今日はやたら平和
shinh.org はなんもしてない
27c3 とかいうのでゴルフ場使うよって話でいくつか対応
あと twitter/mircbot が止まってるのは twitter API が変わったとかなんとか
chrome extension は engoogle とかは user data を適当に廃棄したらインストールできるようになった。
chrome key config は任意 JS 書けないってことで、 shortcut manager にしようと思ったのだけど、 しかし chromekey が動いた時点でやる気が失せた
chromeswitchproxy は chrome のコードを見た結果、 gconf 経由で設定すれば gconftool-2 コマンドで 適当に動的に変えれる気がしたので、 それのラッパ書いてお茶を濁せば良いのではないかと思った。
(20:21)
いろいろとやりたいが
(18:20)
timeline
todo
重要なデータは特に無いはずだから backup から基本全部取れるはず… まあ後で HDD ひっこぬいてデータは抜いておこうと思う
(09:24)
SC2 で FFA を3人でやってるらしいんだけど、なんかマウスカチカチやってるんじゃなくて世界に入り込んでるような感じでやっている。なんか鶏を何匹か作ってるのを見て対戦相手が「対空できない子作ってるから muta 作ろう」とか言ってるのが聞こえる。そうかしょうがないなあと思って muta を作ろうと、 spire の種を買って埋めようと考える(夢でないゲーム中に spire の種なんてものはなくて生産ユニットが変形して spire っていう建物になるし鶏のユニットとかない)。 spire の種をバレにくい位置に建てようとそこらを全力疾走して、そこらにあったマンホールを開けて何故か水にぬれた土が見えてるのでそこに種を入れる。その土の上にいた生物に種を食べられてしまう。しょうがないから hydra 作るか…と思ったら起きた。感想としては SC2 やりすぎ。起きて思ったことは hydra さんとかほとんど作ったこと無いな…と
同僚が WebKit の JS の挙動がおかしいとか言っている。なんとかとかいうのがおかしいらしい。なんとかというのは聞き取れない。デモを見てみる。どうもキャラクタが往復しないといけないのに、ランダムな方向に進んでしまっているらしい。たしかにおかしそうと思う。デモのコードを見て、なんとかと言ってたのは currentRot というフィールドの話だったぽいと気付く。はて JS に currentRot なんてあったっけ…と思ったら起きた。
(08:01)
http://twitter.com/kinaba/status/16912649623183360
なるほどそういえばそういうのもありました。追加しておきました。
http://shinh.skr.jp/h/?ClassNaming
(09:16)
G1 ちゃんに最近の android 入るらしいということなので、 同僚さんに渡したところ root 取って あやしげなリカバリーソフトみたいなものが 動いてるだけで起動しないみたいな状況になった。
役に立たんなーということで適当に色々やったら CyanogenMod というディストリビューションで froyo が入った。
http://wiki.cyanogenmod.com/index.php?title=Dream:Installing_CyanogenMod_5%2B
に書いてある通りで、
って感じで順にやっていけば良いようだった。 入れる方法は adb で転送してリカバリーソフト的なやつで 展開して…ってのを繰り返せば良かった。
どうも無線 LAN が不安定な以外は良いように見える。 マルチアカウントもあるし。 CPU 的なのは速くなったような気がするんだけど、 メモリ的なとこは遅くなったような気がする。 まあ G1 とか元々たいがい遅いので気にならない。
無線だけはうざいので 2.22.23.02 ってのを試すといいんだろうか…
(03:33)
前 | 2025年 7月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
_ nineties [factdiv(N)/sqrt(N)はNが偶数だとsqrt(PI/2) = 1.253..にNが奇数だとsqrt(2..]
_ kinaba [足し算掛け算は a+(b+c) (普通の再帰)を (a+b)+c (末尾再帰)に変えて問題ないけど、cons は c..]
_ shinh [> ウォリスの公式 おおおありがとうございます。こいうのがあるんですね。例のごとく三角関数やら円周率が登場するわけ..]