トップ «前月 最新 翌月» 追記

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ToDo:


2010-08-01

_ JS で文字コード変換

ブラウザさんは文字コードテーブル持ってるのに それ使えないの…という雑談を少しして、 できるような気がしたのでやってみた。

http://shinh.skr.jp/tmp/uconv.html

data: との通信は cross domain 通信扱いのようなので、 SJIS => UTF8 の方は困ったなーということで、 変換後の文字列を持って元のドメインに戻ってくるとかしてゴマかした。

(00:01)

_ ELF

でまぁ内職は2時間くらいで電気切れていまいちだった。 ネットとかはいらんから電源は欲しいなぁ…

木金とネットあんま使わずに Mach-O を 適当に読むとかやってたんだけど、 まぁネットあったら dyld のコードというか、 MachOBinder.hpp があれば割と一発でわかる感じなのであった。 特に Mach-O の relocation table は .debug_lines 的な VM になってると気付いて、こりゃネット無しじゃ無理だわいとなったのだった。

あと uleb とか sleb ってどっかで見た単語だなーと思ったら DWARF だった。 何故か少し前にこのへんは気の迷いで実装してたからすぐ実装できて良かった。 つまり Mach-O は DWARF とかより後で成立したから そのへんの知見を生かせてるのかなぁとか思った。

Mach-O があきらかに ELF よりいいなぁと思えた点は、 64bit になっても構造体のサイズが変わらないオブジェクトが結構あることで、 まぁコードが書きやすくてよろしいと思った。 ELF は全体がキモいテンプレートかマクロの塊になってしまっていかんと思う。

あとはなんか Mach-O 全体的に意味のわかってない フィールドが多い。

それと変数名に macho とかするとマッチョだし、 mach_o とか冗長な感じだし、 mach だとちょっと足りない気がするし、 困る。

(00:31)

_ あきはばら

トプカおいしかった。

りなっくすかふぇは周りの会話がほどよくて良かった。 僕は気が散る程度の雑音がある方がいいんだよな。 あとまぁ雑音の内容自体が興味深かったりも。

ネットは無かったけど普通に考えて 僕はあそこの無線使う権利を持ってる気がするので、 さっさとそれは設定すべき。 まぁネットあることによる害を考えるとまぁいいか的な。

http://twitter.com/shinh/status/20050925021

この SEGV するところまで行ったという発言はよく考えると意味わからんけど、 linux のローダはロード中にエラー出ると SIGKILL で死ぬので、 SEGV した時は結構嬉しかったんですよ。 つか冷静に考えるとどういうメカニズムで SIGKILL になってるのだろうか。 ちょっと不思議な気がするぞ。

よく見るとローダ内の SEGV だからまだおかしいんだけどね…

空気清浄機というのが欲しくて見に行った。 さっぱりスペックの差がわからん上に、 小さくて加湿器つきみたいなのが無かったので、やめた。 安いやつは、大きくて加湿器つきが15000くらいで、 小さくてついてないのが8000円くらいみたいだった。 なんか wikipedia 見る限り高性能ぽくないやつの方が安心できそうな商品だなぁ。

ついでに乾燥機つきのが欲しいんだよなーと、 洗濯機を見てて買った。 設置と回収含めて43000くらい。 今のやつは壊れてないので僕の中のもったいないおばけがうるさかった。 けど、今のやつ15000円もしてないし、一応4年は使ったし、 干すのにかかる時間は無駄じゃありませんか、 それにそんなに高くないし、などと説得した。

あと温度計と湿度計が欲しかったから見てみたんだけど、 なんか店に展示されてるものが、 一つ一つ結構違う湿度を指していたり、 温度すら違うのもあったりして、 えーとうーんとか思ってびびってしまった。

メモ: 僕は 7877 ポイントもヨドバシポイントを所有しているよ

(22:12)

_ libc6-dbg

これを入れると loader の stacktrace がちゃんと出るみたいだ… べんり。

あと斑鳩やったら5面に2機持って1400万とかあって、 うおおこれはワンコインクリアコースと思った。 まぁ5面道中でチェイン切れまくって残機増えなかった上に、 タゲリ第一で3機とも死んだわけだけが…

ちょっと前にドキャで練習した成果が出てると言えると思う。

なんか思い出すに、1面で死ぬのと、3面の前半で死ぬのはひどいからなんとかすべき。 あとは4ボスで死んだんだっけ。なんでそこで死ぬねん的な場所ばかりだな。 2面は一回も切れなかったらしく、 S++ とか出て笑った。

(23:01)

_ rakudo star crash 予習

基本的なやつを試してみた。

sub n($n) {
  return eval("1+" x $n ~ "0");
}
say n(3);    # 3
say n(100);  # 100
say n(300);  # 300
say n(500);  # exit(0) \(^o^)/
say n(1000);

クラッシュしなかったのは偉いが、 せめて exit(1) とかしようよ

(23:32)

_ ゴルフ場に入れた時の rakudo

は n(500) と n(1000) で Nil が帰ってるっぽい、のかな

(23:35)


2010-08-03

_ ちゅーりんぐ

http://slashdot.jp/apple/article.pl?sid=10/04/14/0132226

を見てした発言

00:32 >shinh< おやチューリング完全じゃなければプログラミング言語ではないという切り口はどうなんでしょうね
00:32 >shinh< 強烈に便利だけどチューリング完全じゃない言語を開発して内蔵…

まぁ元の前提がおかしい議論なので Apple 対策としてはどうでもいいんだけど、 チューリング完全じゃないけどそれなりに色々できる、 みたいなのを考えるのは少し面白いような、 どうでもいいような。

例のごとく今一つチューリング完全ってなんなのかよくわかってないのだけど、 まぁ例のごとく brainfuck が実装できないなーって感じであれば良いことにする。

ゲーム用スクリプトとして使えるレベルとかなら、 代入、加減乗除など、 if-else 、回数指定で1000回まで回れるループ、 とかくらいならチューリング完全にはならない?

あと関数あるけどスタックサイズが 10 までしかありませんよとか。

(00:41)

本日のツッコミ(全4件) [ツッコミを入れる]

_ mame [HQ9+ のことですね、わかります]

_ shinh [たしかに FizzBuzz くらいがついていれば僕の書くプログラムの5割程度を網羅できてるかもしれませんね]

_ Gimite [たいていのプログラミング言語は(実行環境を考えると)記憶領域は有限だし実行時間も有限(ハードウェアの寿命が上限)なの..]

_ shinh [その論を防ぐために、僕の脳内でのチューリング完全はメモリが N ある時にメモリが N あるチューリングマシンと同じ計..]


2010-08-06

_ rakudo

http://atnd.org/events/6687

人気の無さに笑った。 テーマ的には僕の中ではひゃくにんくらい来てもおかしくなさそうに思うんだけど、 まぁそのへんの感覚がずれてるのは今に始まったことではないし、 そしてこのへんの感覚があっている人というのは 実際のところほとんどいないのであって、 つまり趣味の多様化とかそういう一般的などうでもいい単語で

かたがつく

(23:55)


2010-08-07

_ jvm

http://www.slideshare.net/kmizushima/java-4912958

そいやこれ見て思い出したけど、 64bit 環境で long とかリファレンスのサイズってどうなってるんだっけ…

(00:47)


2010-08-08

_ Array#|

なんか体感として異様に遅い印象のあるメソッドなので、 O(N^2) とかになってるんじゃないかねーと思ってたんだけど、 今見てみたら普通に O(N) だった。

ハッシュ構築してから削除しつつ push してくのかぁ。 空のハッシュに挿入しつつ push してく方が自然な気もするけど、 まぁいずれにせよたいした差はなさげ。

そもそもこんなもんゴルフ人間しか使ってない気もする

(12:21)

_ .hash

Histogram for bucket list length in section [ 7] '.hash' (total of 257 buckets):

 Addr: 0x00000001000022a0  Offset: 0x0022a0  Link to section: [ 5] '.dynsym'
 Length  Number  % of total  Coverage
      0     237       92.2%
      1      20        7.8%    100.0%
 Average number of tests:   successful lookup: 1.000000
                          unsuccessful lookup: 0.077821

よく見るとこれおかしすぎるんじゃないかとメモ

(15:49)

_ マシンがヘンな状態でしんだ

emacs は元気に動いてるけど端末の入力の反応はすごく遅いか ほとんど反応無いし、 コマンドの発行もすごく時間がかかって成功するかしないかという感じだった。 emacs からの shell はそれなりに動いてたので、 適当にあやしい子を殺したりしてたけど、 まぁいずれ emacs もコマンド出せなくなった。

適当に syslog を見るとなんかあやしいこと言われてるな。

Aug  8 19:27:50 u4 kernel: [33951.653025] BUG: soft lockup - CPU#1 stuck for 409
6s! [chrome:8780]
Aug  8 19:27:50 u4 kernel: [33951.653032] Modules linked in: binfmt_misc ppdev l
p parport sco bnep l2cap crc16 bluetooth bridge stp xen_evtchn xenfs uinput hdap
s input_polldev cpufreq_conservative cpufreq_userspace cpufreq_stats cpufreq_pow
ersave fuse dm_snapshot dm_mirror dm_region_hash dm_log firewire_sbp2 loop snd_h
da_codec_conexant snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_os
s snd_pcm snd_seq_midi arc4 ecb snd_rawmidi snd_seq_midi_event iwl3945 snd_seq i
wlcore i915 joydev drm_kms_helper snd_timer mac80211 thinkpad_acpi pcmcia snd_se
q_device drm cfg80211 yenta_socket rsrc_nonstatic evdev i2c_algo_bit psmouse pcs
pkr tpm_tis processor rfkill battery video ac pcmcia_core serio_raw tpm snd acpi
_processor nvram tpm_bios i2c_i801 i2c_core output soundcore snd_page_alloc butt
on usbhid hid ext3 jbd mbcache dm_mod sg sr_mod sd_mod crc_t10dif cdrom ata_gene
ric sdhci_pci sdhci ata_piix ahci firewire_ohci uhci_hcd ehci_hcd libata mmc_cor
e led_class ricoh_mmc scsi_mod firewire_core crc_itu_t tg3 the
Aug  8 19:27:50 u4 kernel: mal thermal_sys libphy usbcore nls_base [last unloade
d: scsi_wait_scan]
Aug  8 19:27:50 u4 kernel: [33951.653308] CPU 1:
Aug  8 19:27:50 u4 kernel: [33951.653314] Modules linked in: binfmt_misc ppdev l
p parport sco bnep l2cap crc16 bluetooth bridge stp xen_evtchn xenfs uinput hdap
s input_polldev cpufreq_conservative cpufreq_userspace cpufreq_stats cpufreq_pow
ersave fuse dm_snapshot dm_mirror dm_region_hash dm_log firewire_sbp2 loop snd_h
da_codec_conexant snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_os
s snd_pcm snd_seq_midi arc4 ecb snd_rawmidi snd_seq_midi_event iwl3945 snd_seq i
wlcore i915 joydev drm_kms_helper snd_timer mac80211 thinkpad_acpi pcmcia snd_se
q_device drm cfg80211 yenta_socket rsrc_nonstatic evdev i2c_algo_bit psmouse pcs
pkr tpm_tis processor rfkill battery video ac pcmcia_core serio_raw tpm snd acpi
_processor nvram tpm_bios i2c_i801 i2c_core output soundcore snd_page_alloc butt
on usbhid hid ext3 jbd mbcache dm_mod sg sr_mod sd_mod crc_t10dif cdrom ata_gene
ric sdhci_pci sdhci ata_piix ahci firewire_ohci uhci_hcd ehci_hcd libata mmc_cor
e led_class ricoh_mmc scsi_mod firewire_core crc_itu_t tg3 the
Aug  8 19:27:50 u4 kernel: mal thermal_sys libphy usbcore nls_base [last unloade
d: scsi_wait_scan]
Aug  8 19:27:50 u4 kernel: [33951.653571] Pid: 8780, comm: chrome Not tainted 2.
6.32-5-xen-amd64 #1 8932J15
Aug  8 19:27:50 u4 kernel: [33951.653576] RIP: e030:[<ffffffff810cd385>]  [<ffff
ffff810cd385>] unmap_vmas+0x571/0x942
Aug  8 19:27:50 u4 kernel: [33951.653591] RSP: e02b:ffff8800b163dd88  EFLAGS: 00
000246
Aug  8 19:27:50 u4 kernel: [33951.653597] RAX: 0000000000000000 RBX: 8000000073e
5d100 RCX: 00000000080000fb
Aug  8 19:27:50 u4 kernel: [33951.653603] RDX: ffff88006594ac88 RSI: 00007f14291
91000 RDI: ffff8800af1bdc00
Aug  8 19:27:50 u4 kernel: [33951.653609] RBP: 00007f1429191000 R08: ffff8800167
72e70 R09: 0000000000000000
Aug  8 19:27:50 u4 kernel: [33951.653615] R10: 0000000000000120 R11: 00000000000
00120 R12: ffffea0001d9e458
Aug  8 19:27:50 u4 kernel: [33951.653620] R13: 8000000073e5d167 R14: ffff8800167
72e70 R15: 000000000025e000
Aug  8 19:27:50 u4 kernel: [33951.653634] FS:  00007f1459fe37e0(0000) GS:ffff880
003cd4000(0000) knlGS:0000000000000000
Aug  8 19:27:50 u4 kernel: [33951.653640] CS:  e033 DS: 0000 ES: 0000 CR0: 00000
0008005003b
Aug  8 19:27:50 u4 kernel: [33951.653645] CR2: 0000000001f8d024 CR3: 00000000aed
4d000 CR4: 0000000000002660
Aug  8 19:27:50 u4 kernel: [33951.653652] DR0: 0000000000000000 DR1: 00000000000
00000 DR2: 0000000000000000
Aug  8 19:27:50 u4 kernel: [33951.653658] DR3: 0000000000000000 DR6: 00000000fff
f4ff0 DR7: 0000000000000400
Aug  8 19:27:50 u4 kernel: [33951.653664] Call Trace:
Aug  8 19:27:50 u4 kernel: [33951.653673]  [<ffffffff810cd2bf>] ? unmap_vmas+0x4
ab/0x942
Aug  8 19:27:50 u4 kernel: [33951.653683]  [<ffffffff810d1840>] ? unmap_region+0
xb2/0x132
Aug  8 19:27:50 u4 kernel: [33951.653692]  [<ffffffff810d290a>] ? do_munmap+0x2b
d/0x32b
Aug  8 19:27:50 u4 kernel: [33951.653701]  [<ffffffff8114a076>] ? sys_shmdt+0x9d
/0x123
Aug  8 19:27:50 u4 kernel: [33951.653710]  [<ffffffff81011b42>] ? system_call_fa
stpath+0x16/0x1b
Aug  8 19:27:50 u4 kernel: [33951.653727] BUG: soft lockup - CPU#0 stuck for 409
6s! [apache2:8789]
Aug  8 19:27:50 u4 kernel: [33951.653727] Modules linked in: binfmt_misc ppdev l
p parport sco bnep l2cap crc16 bluetooth bridge stp xen_evtchn xenfs uinput hdap
s input_polldev cpufreq_conservative cpufreq_userspace cpufreq_stats cpufreq_pow
ersave fuse dm_snapshot dm_mirror dm_region_hash dm_log firewire_sbp2 loop snd_h
da_codec_conexant snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_os
s snd_pcm snd_seq_midi arc4 ecb snd_rawmidi snd_seq_midi_event iwl3945 snd_seq i
wlcore i915 joydev drm_kms_helper snd_timer mac80211 thinkpad_acpi pcmcia snd_se
q_device drm cfg80211 yenta_socket rsrc_nonstatic evdev i2c_algo_bit psmouse pcs
pkr tpm_tis processor rfkill battery video ac pcmcia_core serio_raw tpm snd acpi
_processor nvram tpm_bios i2c_i801 i2c_core output soundcore snd_page_alloc butt
on usbhid hid ext3 jbd mbcache dm_mod sg sr_mod sd_mod crc_t10dif cdrom ata_gene
ric sdhci_pci sdhci ata_piix ahci firewire_ohci uhci_hcd ehci_hcd libata mmc_cor
e led_class ricoh_mmc scsi_mod firewire_core crc_itu_t tg3 the
Aug  8 19:27:50 u4 kernel: mal thermal_sys libphy usbcore nls_base [last unloade
d: scsi_wait_scan]
Aug  8 19:27:50 u4 kernel: [33951.653727] CPU 0:
Aug  8 19:27:50 u4 kernel: [33951.653727] Modules linked in: binfmt_misc ppdev l
p parport sco bnep l2cap crc16 bluetooth bridge stp xen_evtchn xenfs uinput hdap
s input_polldev cpufreq_conservative cpufreq_userspace cpufreq_stats cpufreq_pow
ersave fuse dm_snapshot dm_mirror dm_region_hash dm_log firewire_sbp2 loop snd_h
da_codec_conexant snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_os
s snd_pcm snd_seq_midi arc4 ecb snd_rawmidi snd_seq_midi_event iwl3945 snd_seq i
wlcore i915 joydev drm_kms_helper snd_timer mac80211 thinkpad_acpi pcmcia snd_se
q_device drm cfg80211 yenta_socket rsrc_nonstatic evdev i2c_algo_bit psmouse pcs
pkr tpm_tis processor rfkill battery video ac pcmcia_core serio_raw tpm snd acpi
_processor nvram tpm_bios i2c_i801 i2c_core output soundcore snd_page_alloc butt
on usbhid hid ext3 jbd mbcache dm_mod sg sr_mod sd_mod crc_t10dif cdrom ata_gene
ric sdhci_pci sdhci ata_piix ahci firewire_ohci uhci_hcd ehci_hcd libata mmc_cor
e led_class ricoh_mmc scsi_mod firewire_core crc_itu_t tg3 the
Aug  8 19:27:50 u4 kernel: mal thermal_sys libphy usbcore nls_base [last unloade
d: scsi_wait_scan]
Aug  8 19:27:50 u4 kernel: [33951.653727] Pid: 8789, comm: apache2 Not tainted 2
.6.32-5-xen-amd64 #1 8932J15
Aug  8 19:27:50 u4 kernel: [33951.653727] RIP: e030:[<ffffffff81280038>]  [<ffff
ffff81280038>] ip_route_input+0x82/0xcbf
Aug  8 19:27:50 u4 kernel: [33951.653727] RSP: e02b:ffff880003cbaa50  EFLAGS: 00
000282
Aug  8 19:27:50 u4 kernel: [33951.653727] RAX: ffffc900046dff98 RBX: ffffffff816
9a620 RCX: ffff8800bacd1200
Aug  8 19:27:50 u4 kernel: [33951.653727] RDX: 00000000aa0ccd42 RSI: 00000000000
12e20 RDI: 000000002a401973
Aug  8 19:27:50 u4 kernel: [33951.653727] RBP: 0000000000000004 R08: ffff8800b10
54000 R09: ffffffffa03a0a70
Aug  8 19:27:50 u4 kernel: [33951.653727] R10: 000000000000000e R11: ffffffff812
81f5d R12: ffff880002e26c80
Aug  8 19:27:50 u4 kernel: [33951.653727] R13: 000000000b0ba8c0 R14: ffff8800b10
54000 R15: 000000000ad0387d
Aug  8 19:27:50 u4 kernel: [33951.653727] FS:  00007fd81e839740(0000) GS:ffff880
003cb7000(0000) knlGS:0000000000000000
Aug  8 19:27:50 u4 kernel: [33951.653727] CS:  e033 DS: 0000 ES: 0000 CR0: 00000
0008005003b
Aug  8 19:27:50 u4 kernel: [33951.653727] CR2: 0000000001a5c604 CR3: 00000000b29
c1000 CR4: 0000000000002660
Aug  8 19:27:50 u4 kernel: [33951.653727] DR0: 0000000000000000 DR1: 00000000000
00000 DR2: 0000000000000000
Aug  8 19:27:50 u4 kernel: [33951.653727] DR3: 0000000000000000 DR6: 00000000fff
f4ff0 DR7: 0000000000000400
Aug  8 19:27:50 u4 kernel: [33951.653727] Call Trace:
Aug  8 19:27:50 u4 kernel: [33951.653727]  <IRQ>  [<ffffffff8100e6fd>] ? xen_for
ce_evtchn_callback+0x9/0xa
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8100ee22>] ? check_events+0
x12/0x20
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff812f3bd1>] ? packet_rcv_spk
t+0xd3/0xde
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8100e6fd>] ? xen_force_evtc
hn_callback+0x9/0xa
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8100ee22>] ? check_events+0
x12/0x20
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8127bd0a>] ? nf_iterate+0x4
1/0x7d
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81281bd0>] ? ip_rcv_finish+
0x0/0x38d
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8127bda8>] ? nf_hook_slow+0
x62/0xc3
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81281bd0>] ? ip_rcv_finish+
0x0/0x38d
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81281c04>] ? ip_rcv_finish+
0x34/0x38d
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff812821fd>] ? ip_rcv+0x2a0/0
x2ed
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039a848>] ? br_handle_fram
e_finish+0x110/0x148 [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039ea42>] ? br_nf_pre_rout
ing_finish+0x284/0x2a6 [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039e7be>] ? br_nf_pre_rout
ing_finish+0x0/0x2a6 [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8127bda8>] ? nf_hook_slow+0
x62/0xc3
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039e7be>] ? br_nf_pre_rout
ing_finish+0x0/0x2a6 [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039efb8>] ? br_nf_pre_rout
ing+0x554/0x56e [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8127bd0a>] ? nf_iterate+0x4
1/0x7d
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81258697>] ? __netdev_alloc
_skb+0x29/0x43
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039a738>] ? br_handle_fram
e_finish+0x0/0x148 [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8127bda8>] ? nf_hook_slow+0
x62/0xc3
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039a738>] ? br_handle_fram
e_finish+0x0/0x148 [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa039aa28>] ? br_handle_fram
e+0x1a8/0x1cc [bridge]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8125e458>] ? netif_receive_
skb+0x350/0x46d
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8125e6a2>] ? napi_skb_finis
h+0x1c/0x31
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffffa005c4dd>] ? tg3_poll+0x6cf
/0x93d [tg3]
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8100e6fd>] ? xen_force_evtc
hn_callback+0x9/0xa
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8100ee22>] ? check_events+0
x12/0x20
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8125ebcf>] ? net_rx_action+
0xae/0x1c9
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff810559e6>] ? __do_softirq+0
xdd/0x19f
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81012cac>] ? call_softirq+0
x1c/0x30
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81014903>] ? do_softirq+0x3
f/0x7c
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81055855>] ? irq_exit+0x36/
0x76
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff811f22ea>] ? xen_evtchn_do_
upcall+0x33/0x42
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff81012cfe>] ? xen_do_hypervi
sor_callback+0x1e/0x30
Aug  8 19:27:50 u4 kernel: [33951.653727]  <EOI>  [<ffffffff810cc9b8>] ? do_wp_p
age+0x5ae/0x707
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff810cc997>] ? do_wp_page+0x5
8d/0x707
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8100c47d>] ? __raw_callee_s
ave_xen_pmd_val+0x11/0x1e
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff810ce4b4>] ? handle_mm_faul
t+0x742/0x7a5
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff810d164f>] ? get_unmapped_a
rea+0xd7/0x139
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff810347e7>] ? do_page_fault+
0x266/0x282
Aug  8 19:27:50 u4 kernel: [33951.653727]  [<ffffffff8130c675>] ? page_fault+0x2
5/0x30
Aug  8 19:30:01 u4 /USR/SBIN/CRON[8964]: (root) CMD (test -x /usr/lib/atsar/atsa
1 && /usr/lib/atsar/atsa1)
Aug  8 19:35:01 u4 /USR/SBIN/CRON[9079]: (root) CMD (command -v debian-sa1 > /de
v/null && debian-sa1 1 1)
Aug  8 19:35:16 u4 kernel: [33951.657735] INFO: task chrome:3176 blocked for mor
e than 120 seconds.
Aug  8 19:35:16 u4 kernel: [33951.657735] "echo 0 > /proc/sys/kernel/hung_task_t
imeout_secs" disables this message.
Aug  8 19:35:16 u4 kernel: [33951.657735] chrome        D 0000000000000002     0
  3176      1 0x00000000
Aug  8 19:35:16 u4 kernel: [33951.657735]  ffffffff814731f0 0000000000000286 000
0000000000064 ffff8800bbc41c90
Aug  8 19:35:16 u4 kernel: [33951.657735]  ffff8800bbc41c90 ffff8800bbc41ca0 000
000000000f8a0 ffff8800bbc41fd8
Aug  8 19:35:16 u4 kernel: [33951.657735]  0000000000015640 0000000000015640 fff
f8800af8fbf90 ffff8800af8fc288
Aug  8 19:35:16 u4 kernel: [33951.657735] Call Trace:
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8100ee0f>] ? xen_restore_fl
_direct_end+0x0/0x1
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8130b324>] ? schedule_timeo
ut+0x2e/0xdd
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff810bab9e>] ? __pagevec_free
+0x69/0x80
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8100e6fd>] ? xen_force_evtc
hn_callback+0x9/0xa
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8100ee22>] ? check_events+0
x12/0x20
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8130b1dc>] ? wait_for_commo
n+0xde/0x15b
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8100ee22>] ? check_events+0
x12/0x20
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8104c144>] ? default_wake_f
unction+0x0/0x9
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8100ee0f>] ? xen_restore_fl
_direct_end+0x0/0x1
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff81064bf7>] ? synchronize_sc
hed+0x4c/0x52
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff81064bfd>] ? wakeme_after_r
cu+0x0/0xb
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff8106a034>] ? synchronize_sr
cu+0x28/0xab
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff811179f4>] ? fsnotify_put_g
roup+0x6a/0x90
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff81119733>] ? inotify_releas
e+0x25/0x37
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff810f1159>] ? __fput+0x100/0
x1af
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff810ee596>] ? filp_close+0x5
b/0x62
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff810ee631>] ? sys_close+0x94
/0xcd
Aug  8 19:35:16 u4 kernel: [33951.657735]  [<ffffffff81011b42>] ? system_call_fa
stpath+0x16/0x1b
Aug  8 19:37:16 u4 kernel: [33951.657735] INFO: task chrome:3176 blocked for mor
e than 120 seconds.
Aug  8 19:37:16 u4 kernel: [33951.657735] "echo 0 > /proc/sys/kernel/hung_task_t
imeout_secs" disables this message.
Aug  8 19:37:16 u4 kernel: [33951.657735] chrome        D 0000000000000002     0
  3176      1 0x00000000
Aug  8 19:37:16 u4 kernel: [33951.657735]  ffffffff814731f0 0000000000000286 000
0000000000064 ffff8800bbc41c90
Aug  8 19:37:16 u4 kernel: [33951.657735]  ffff8800bbc41c90 ffff8800bbc41ca0 000
000000000f8a0 ffff8800bbc41fd8
Aug  8 19:37:16 u4 kernel: [33951.657735]  0000000000015640 0000000000015640 fff
f8800af8fbf90 ffff8800af8fc288
Aug  8 19:37:16 u4 kernel: [33951.657735] Call Trace:
Aug  8 19:37:16 u4 kernel: [33951.657735]  [<ffffffff8100ee0f>] ? xen_restore_fl
_direct_end+0x0/0x1
Aug  8 19:37:16 u4 kernel: [33951.657735]  [<ffffffff8130b324>] ? schedule_timeo
ut+0x2e/0xdd
Aug  8 19:37:16 u4 kernel: [33951.657735]  [<ffffffff810bab9e>] ? __pagevec_free
+0x69/0x80
Aug  8 19:37:16 u4 kernel: [33951.657735]  [<ffffffff8100e6fd>] ? xen_force_evtc
hn_callback+0x9/0xa

(20:05)


2010-08-09

_ Hello!

いつものことながら hello が動くと嬉しい。

i@um ~/test> cat hello.c
#include <stdio.h>
int main() {
    printf("Hello, world!\n");
    return 0;
}

i@um ~/test> gcc hello.c
i@um ~/test> ./a.out
Hello, world!
i@u4 ~/wrk/ld-mach-o
> scp i@um:test/a.out .
a.out                               100% 8704     8.5KB/s   8.5KB/s   00:00
i@u4 ~/wrk/ld-mach-o
> ./macho2elf a.out elf
i@u4 ~/wrk/ld-mach-o
> ./elf
Hello, world!

あとは引数とかとシンボルのリネームとかかな。

引数の方はこんなコード書いて

#include <stdio.h>

int main(int argc, char* argv[]) {
  printf("argc=%d\n", argc);
  printf("argv[0]=%p\n", argv[0]);
  printf("argv[0]=%s\n", argv[0]);
  printf("argv[1]=%p\n", argv[1]);
  printf("argv[1]=%s\n", argv[1]);
  return 42;
}

実行すると、

> ./elf foo
argc=2
argv[0]=0x7fff558ef3d4
argv[0]=./elf
argv[1]=0x7fff558ef3da
argv[1]=foo

引数あってるじゃん… ELF と Mach-O は 起動時の ABI は一緒ってことかね。

いつも思うんだけど printf ってこう、 不審な値が入ってることなんていくらでもあるはずだから、 多少チェック入れて欲しいよねとか思う。 出力前に引数の値チェックする safe_printf みたいなのあってもいいと思う。 glibc の printf は %s で null check するのはえらいと思う。

あとグローバル変数忘れてた。 たぶん動かんのでチェックしよう。

(00:02)

_ ゴルフ場

ひさびさにスレが目に入ったので見たら色々要望とかあった。 アンテナに入れておこう…

http://pc12.2ch.net/test/read.cgi/tech/1173057314/l50

さて Scala は何故入れなかったんだっけ… たぶん強烈に遅かったんだと思う。 しかしまぁいいかと今度入れよう。

Ioke ってのはなんだろう入れよう。

むうちょっと日和った Io for JVM or CLR って感じかな。 コンセプトは良さげ。

XSLT って普通の入力処理できるんだろうか、まぁ入れよう。 処理系は何がいいんだろう。

pugs => rakudo はそうなんだよなぁ。 pugs 自体が死んだようなもんに見えるので、 両方残すとかはなるべくしたくなかった。

  • この記録は pugs 特有の機能を使っているように思う
  • そして rakudo ではこの記録は破れなさげ

というようなものは、 まぁ教えてくれれば消したいと思う。 そういうのは少ないと思うんだけど、どうなんだろう。

99.rb の 14B は消したみたいだ。 fib.c の 21B か…これはどう見てもおかしいな。 消すか。消そう。消した。 万が一復帰する必要があった時用メモ:

["", 21, 0.000241, Sun Sep 28 18:39:34 +0900 2008, [0], 0]
["", 21, 0.089871, Sun Sep 28 18:27:00 +0900 2008, [0], 0]

Octave 。あれ標準入力とかあるんかいな。入れよう。

use form 。つか use form はひどすぎるのでなんとかするべき。

(01:52)

_ rakudo star crash

http://atnd.org/events/6687

最近色んなことを記録してないのがよくないと思ったので、 とりあえず記録しておく。

Perl6 は思った通りというか、 やはりとても面白かった。 なんていうか、色んな問題に他言語から取ってきた手法じゃなくて、 ユニークな解を与えていくって感じで、とてもいい。 ただ Rules だけはちょっと失望感があるかなぁ… まだしっかり見てないからわからんけど。

今一つ配列とリストの区別がつかないのと、 それらの結合演算子の無いっぽいのが痛いぽかった。 いや , でひっついたりもするけどそのへんよくわかってない。 () で書くのが Parcel or List で [] で書くのが Array 、 @a に入ってるのも Array 、って感じか、な。

コードとしては、 フィボナッチに感銘を受けつつ、 にはさんパスカル書いてくださいとか人に丸投げしてたら書いてくれたので、 それをちょっと縮めたりしてたのを xhl さんが大幅に縮めて下さった、

([1],{0,@^_ Z+@^_,0}...*)[^13]>>.say

がまぁいい感じだったと思う。

あとこの fizzbuzz もいいなぁ。長いけど。

http://d.hatena.ne.jp/lyrical_logical/20100807/1281199290

落とす方は無限リスト作るとすぐメモリ使い果たすのがアホかという感じではあった。 メモリ使い果たす時に GC が無限再帰して stack overflow してるのは興味深かった。

あとは parrot/rakudo のコードを眺めてる時間も多かったと思う。 言語作る人ってメタメタしいの好きだよねえと思った。

(02:08)

_ kernel 読書会

だいぶ前のやつ。

http://www.slideshare.net/suzaki/ss-4707229

正直何言ってるんかなー的な話が多かったかなぁ。 なんか終わった後に感想は書いてあった。

流れとしては、

  • まぁ普通のマルチユーザはありえんけど
  • 仮想化というのなら安全に切り離されてて安くなるじゃないか!
  • ちょっと待って! 仮想化されてても VMM とかドライバにバグがあるとか、そいうことあると結構こわいよ!?

って感じなのかな。

全体的にクラウドってのがこいう心配しなきゃいけないほどマジメにみんな考えてることなんだなぁ…というのが感想だったと思う。僕の自分の中との温度差にびびった感。

まぁそれより、 hyoshiok さんが楽天のコミュニティとのつきあいガイド的なのをプレゼンされてて面白かった。 OSS すいしんーみたいなのって、言うのはとっても簡単だけど、それでもなかなか会社は言ってくれないことなので、それを言うだけでも素晴らしいことだと思った。

そしてしかし実際にすいしんーって感じにするには、それは僕の理解が正しければ従業員がそれなりに忙しくない必要があって、そいう面のサポートをするのは会社としては短期的には真にコストのかかることであって、そして大変なんじゃないかなぁと思う。というような話をしてみた、が、どの程度説明できたかに自信はさっぱりない…どの程度うまくいってるかというと、それなりにはうまくいってるけど完璧ではないくらいだと思うんだけど、グーグルは結構マジでこのへんにコストを割いていると思っている。僕の感覚ではヒラ従業員の意識とかうんぬんとかよりそいうサポートみたいなのが無いと現実問題としてキツいと思うんだよなぁ。

なんか OSS の中にあるバグとかって普通に追う人は追うと思うんだけど、 // 弊社向け hack! とかいうコメントと共にローカルへの変更だけになっちゃうケースが多いんじゃないかなぁと漠然と思っていて、そこをちゃんと還流していくか否かってのは仕事に余裕があるか否かと、その人になんかそいう精神があるか異なか否かがたぶんあって、後者がある人ってのはもうほっといても勝手にやるので、たぶん禁止さえしてなければ実際のところどうでもよくて、多数であろう前者の方のサポートはなんか重要なんじゃないかなぁ…という。

で、一番重要な話はこう実際英語とかどうすかと聞いたことなんだけど、割と好意的に受け入れられているらしい。潰しの効くスキルだからいい機会である、って感じなのかな、という印象だった。

そしてそれは、個人的には大変残念というか、くやしいというか。なんか漠然とこうずっと、英語とかとの向き合い方はマジメに考えないといけないのか、それともほっといてなぁなぁのうちに退社してニートになるか、というのが漠然とあるのだけど、真面目に考えた方がいいのかなぁ…

こうなんで英語イヤかというと、それはまぁ色々理由らしきものは考えられて。僕は自分で勝手に自分は勉強熱心であると思っていて(主に知らない人に知ったかぶれる程度の知識を修得することに関して)。で、それは今まで基本的に、あまり目的とか深く考えず単に知りたいから勉強してきただけっていうのが強くて、そこはなんか漠然と、否定しちゃいけない部分な気がしていて。ていうのはこう、塾とか予備校とか TOEIC とかでもいいんだけど、無理矢理こう、学校とか会社に行くためにおべんきょー、みたいなのをやっている人を見て、どうもあまりうまくいってなさげだなぁとか思ったのが強いんだけど、まぁそいう現実的なものは後からついてくるべきことであって、動機であってはいけないと、こう漠然とした俺ルールがあって。今後仕事で潰しが効きそうだから英語勉強ってのは、それに見えて大変イヤなのだった、というのも理由の一つかなぁと思う。

まぁ趣味は言い訳なのでこれも言い訳でしかないとおもう

(02:23)

_ pugs と parrot

この件に関しては、言語ごとに集計しつつも、 その投稿がなされた時のバージョンを記録、 っていうやりかたをするべきだったんだと思う。 同じようなやりかたで例えば JRuby なんかもサポートできるといいんだろうと思う。

言語をリモート実行するようなものをこれから作る人は そのへん気をつけるといいんじゃないかなぁ。

(02:46)

本日のツッコミ(全4件) [ツッコミを入れる]

_ satyr [> pugs 特有 http://golf.shinh.org/reveal.rb?Nothing/kt3k_11..]

_ yt [すっかり忘れていたのですが、お手数でなければゴルフ場のAdaのコンパイラをgcc-4.5系列にバージョンアップしてい..]

_ shinh [おー pugs は <> 使えたんですね…これ消して回るとなると結構もりもり消さんといかん感じですかね困る。]

_ shinh [gcc のアップデートはちょっとめんどくさいですね… Debian に入ったら必ずやるです。]


2010-08-11

_ wine

そういえば wine について書こうと思って書いてない。 もう書くの忘れたまんまになりそうなのでなんか書いておく。

あれは普通に考えると PE ローダ。 PE はエントリアドレスとか指定できるっぽいので、 まぁ適切な位置に配置してやらなければならん。 しかし普通に wine は libc とかも使うわけで、 wine 自身やら libc やらが PE を置きたいアドレスに 配置されたら困る。

wine がどうやって回避してるかっていうと、 ELF のロードを自分でやってる。

正確にはうちの debian とかだと、

  • /usr/bin/wine - 単なる bash script
  • /usr/lib/wine/wine.bin - pthread か kthread かを選ぶ程度のどうでもいい ELF バイナリ
  • /usr/lib/wine/wine-preloader - static link された ELF ローダ。自身の entry address は WIN32 が絶対に使わないアドレスを使っていて、勝手に .so をロードされたくないアドレスは全部 mmap しておくことによって .exe と .dll を好きなところに置けるようにしている。 .so のロードは本来の ELF loader にやらせてるらしいんだけど、そのへんどうやってるかは調べてない (TODO)
  • /usr/lib/wine/wine-pthread - wine 本体。こいつが kernel32.dll.so とかを dlopen でロード、かな?

とかいう感じになるっぽい。 細かいところはまた今度調べないといかん。

あとはまぁ C プリプロセッサ持ってたり、 たぶん複数プロセスのアプリとかもちゃんとなんとかせんといかんからか、 レジストリの管理やらなんやらをしている wineserver とかいうのが 動いてたりとか、まぁなんか知らんけどすごい開発リソースが投入されてるよなーと。

(02:47)


2010-08-15

_ エディタ

が作りたい欲があるんですが。

マジメな話どのくらい大変なんだろうなぁ

(02:06)

_ data order

http://golf.shinh.org/p.rb?data+order

ソートしない方針は思いついたけど、 Array#count が refe で出てこなかったから、 あれー無かったっけーと思ってやめてしまった…

(05:05)

本日のツッコミ(全3件) [ツッコミを入れる]

_ もわ [作りたいですね。]

_ sa-y [libtexteditor ってないかなーとか時々思いますね…]

_ isk8086 [じゃあつくろう<ぇ]


2010-08-18

_ エディタ

http://shinh.skr.jp/m/?date=20100815#c

意外とみんな作りたいということがわかった。

僕が作りたいというかエディタを作るとしたら… という妄想としては二種類あるようだ。

まず一つ目は、 WM でいうところの sevilwm みたいな、 俺しか使わないから俺の必要な機能だけつけるよ系の何か。 僕の使う機能だけ、ってことならまぁ割と現実的に作れるんじゃないかな。 まぁそういうものでも多少 scriptable な方がやりやすそうなので、 まぁ JS あたりは乗せるのかなぁ、どうだろ。

もう一つの方は明らかに単なる妄想で、 Emacs lisp の部分を JS にして シングルスレッドやめた Emacs みたいな何か。

ほとんどのコードを JS にしておくことによって、 ネイティブアプリとしても、ブラウザ上でも動くよ的な妄想。

まぁブラウザで動かすって方は テキストを持つデータ構造を好きにできないので、 大きいファイル相手にすごく重くなって全く実用的でない予感しかしないけど。 裏で超かしこく range 指定での query を繰り返せばなんかできるかもしれん。

(00:37)

_ 最近のこと

会社が六本木に引越したので近くて出社がラク。

六本木には卓球台があるのでやたらやってる。 卓球ですらケガできる子なので生傷がたえない。

Star Craft 2 を遊んでいる。 面白いと思う。

ただ SC2 はアカウントロックされて悲しいことになった。

  • Windows マシンに入れてみた。遅い。
  • Mac book pro に入れてみようと思って、別の IP でインストールして遊んでみる
  • それは suspicious activity らしく、アカウントロックされる
  • どうもパスワードリセットしないといけないようだ
  • パスワードリセットには秘密の質問に解答しないといけないけど、ランダム文字列だったので解答不能
  • しゃーないので Blizzard の web form からなんか聞く
  • 2日くらいかかって部署違うからこっちに聞いてちょとメールが来る
  • その違う部署の方にメール
  • しばらくしてから返信、 FAQ をテンプレとしてはっただけ的な解答とともに、これで解決しない場合はメールしなおしてねと書いてある
  • それに全然返事来ないもんだから、そっちの部署っぽい web form の方でも聞いてみる
  • 2日くらいたって、秘密の質問に答えてパスワードをリセットしてね☆とかえってくる。当然秘密の質問覚えてないことは書いたんだけど
  • しゃーないので国際電話。30分くらい待ち時間あったけど、リセットしてもらえた。電話代が3800円とかになってアホかと

電話自体は大変親切で、英語電話としてはこれまでに無いくらいスムーズだった。 片言でも英語喋れて良かったね的な…

あと思ったのはついでに秘密の質問も再設定してもらうべきだった。 どうもログインできても変更できないみたいだ…

(00:49)

_ canvas

知ったかぶりコメントを書いた。

http://d.hatena.ne.jp/mindcat/20100815/1281877127#c1282062678

まとめておくと、

  • Firefox - cairo - 挙動 A
  • Mac Safari - Core Graphics - 挙動 B
  • Chrome - skia - 挙動 B
  • Epiphany - cairo - 挙動 B
  • Rekonq - Qt - 挙動 C (たぶん論外)
  • Win Safari - Core Graphics (を Win32API で実装したもの) - 挙動 B
  • Opera - ??? - 挙動 A

って感じかな。 Opera は linux 上での結果だけど、まぁ win とか mac も同じだろうと思う。 てか IE9 はどうだろ。 今 Win 無いので明日見てみようと思う。 僕のカンでは Firefox に一致するんじゃないかな。

WebKit は同じ WebKit でも結構環境依存で 挙動が変わる部分があって、 こいう議論の時はうざいことこのうえないことだと思う。 ただ、 WebKit の環境ごとに最速な方法で 実装する手段を与えますよーていうやり方で、 共通レイヤ作りがちで速度的な面で不利になりがちな Gecko より速くなりがちなので、 一概に WebKit うんこというわけではないんだよー という話かなぁと思う。

(01:48)

_ strstr

この実装はちょっと面白いなと思った。

http://trac.webkit.org/browser/trunk/JavaScriptCore/wtf/text/StringImpl.cpp?rev=65493#L511

何度見てもこれは内容を忘れるものの一つだと思うのでまた今度読もうと思う…

http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%8C%E3%83%BC%E3%82%B9-%E3%83%A2%E3%83%AA%E3%82%B9-%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E6%B3%95

こういうのもあるらしい。

http://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%A4%E3%83%A4%E3%83%BC-%E3%83%A0%E3%83%BC%E3%82%A2%E6%B3%95

でこの StringImpl 見てて思ったんだけど、 これメモリもうちょいケチれね?

(02:10)

本日のツッコミ(全3件) [ツッコミを入れる]

_ Rui [WebKitのstrstrは確かに面白いけどBMより遅そうではないですか? なぜBMを使わないのか謎です。]

_ もわ [JSなんですね!JSな人になちゃったんですね! それはともかく2の方は真面目に作れればemacs捨てられそうで..]

_ shinh [今 BM の説明読みました。メモリ使用量かなーと思いましたがどうでしょうね。 WebKit の場合単に知らなかったと..]


2010-08-20

_ pimpl 死んじゃえというはなし

http://d.hatena.ne.jp/lyrical_logical/20100819/1282232382

そういう話なんかなコレ。 pimpl 死ね死ね派として。

元の話は

// header

class C {
public:
    C();
    void f();
private:
    class CImpl;
    CImpl* pimpl_;
};

// source

class C::CImpl {
public:
    CImpl() {}
    void f() {
        // ...
    }
};

C::C() {}
void C::f() { pimpl_->f(); }

// header

class C {
public:
    C();
    virtual void f();

    static C* create();
};

// source

class CImpl : public C {
public:
    CImpl() {
    }
    virtual void f() {
        // ...
    }
};

C* C::create() {
    return new CImpl();
}

の比較ってことなんじゃないのかな知らんけど。 pimpl とファクトリの比較って言ってるから pimpl とファクトリは組み合わせれるとかじゃなくて、 pimpl 的なことをファクトリでやる、っていう話かと想像した。 まぁいずれにせよ元の話が違っても 僕は後者の方が好きだという主張したいという話をしたい。

pimpl って何がダメってめんどくさすぎることで、 ただでさえヘッダのせいで二カ所に関数名書かにゃならんので DRY から遠ざかってるのに、 pimpl とかしたらに三カ所なってありえんというだけ。 まぁそれだけなんだけど、しかし三カ所に書くってホントありえんと思うんですよ。 単に引数一個増やすだけであちこち書き直していくとか完全におかしい。

たぶん後者の話の弱点は仮想関数呼び出しとか ヒープアロケーションのオーバヘッドくらいなわけだけど、 たぶん pimpl 使いたいと思うようなクラスを思い出してみると、 たぶんたいした個数作らないオブジェクトがほとんどなんじゃないかなぁと思う。 NantokaMgr とか NantokaController とか名前つけたくなるクラスが多いんじゃないかと。

(02:16)


2010-08-21

_ さばいじり

おそらく熱暴走で reverse proxy の役目を果たしてた マシンが止まるという事件が 2 度ほどあったので、 OCaml meeting 前にこれは不安だろうということで、 ゴルフ場のマシンの方に reverse proxy の役割をうつした。 これでたぶん大丈夫かな…

(21:56)


2010-08-25

_ pacman

devquiz の pacman とかやってみる。 ダメぽ。

  • lv1 : 37手。
  • lv2 : 256手。手動の方が成績いいんだが…
  • lv3 : 490手。手動で解ける人えらいなぁ…

2010-08-26

_ x86-64 の ABI

ややこしいよなぁ…

http://www.x86-64.org/documentation/abi.pdf

これによると struct 返り値は hidden parameter でいいのかなー と思ってたんだけど、 なんか GCC の挙動違うぞ… と思って調べてみたところ、 どうも RAX と RDX に入るならそっち使う、 って感じかなー。

http://agner.org./optimize/calling_conventions.pdf

によるとややこしいなぁ…

(14:29)

_ u-n

http://twitter.com/ssig33/status/22043287159

ホントだと悲しいなあ…

(15:12)


2010-08-27

_ 暗号解読

http://www.amazon.co.jp/%E6%9A%97%E5%8F%B7%E8%A7%A3%E8%AA%AD%E2%80%95%E3%83%AD%E3%82%BC%E3%83%83%E3%82%BF%E3%82%B9%E3%83%88%E3%83%BC%E3%83%B3%E3%81%8B%E3%82%89%E9%87%8F%E5%AD%90%E6%9A%97%E5%8F%B7%E3%81%BE%E3%81%A7-%E3%82%B5%E3%82%A4%E3%83%A2%E3%83%B3-%E3%82%B7%E3%83%B3/dp/4105393022

これを読んだ。面白かった。

- 最初の方の暗号ってその時代に生まれてたら解けたんじゃねと思ってしまうけど解けないんだろうね。なんというか基礎教養的なものってのは案外強いんだよなーたぶん - まだ解けてない宝の地図とかあるのかーロマン - ディフィーさんとヘルマンさん (以下 DH) は別人 - DH より RSA の方が良いようだ…今一つメリットにどうもピンと来ないけど - RSA も DH も発見者は彼らじゃないそうだすげえ

(00:45)

_ ごるふ

http://golf.shinh.org/p.rb?Sort+by+Length+for+OCaml+Golf+Competition

これなんかうちに short coding とか二冊あるから 賞品とかにしたらどうでしょーとか 自分で言っておきながら持ってかえってくるの忘れて 帰省してた。

僕が優勝すればいいのではないか!

(01:07)

_ glibc を初期化したい

MacOSX のバイナリを無理矢理 linux で動かして遊ぼうとしている。 で、なんか、それなりには動くんだけど たいていのプログラムはどっかで crash する感じで、 どうも glibc の初期化ルーチン走ってないのが良くないかぁ という感じのものが多い気がする。 たとえば setlocale とかそういう。

で、 glibc を初期化したいわけだけど、 どうしたらいいかなーというのがあまりいい案がない。

  • Linux の crt1.o を適当にリンクする
  • ただし main は自前のルーチンに置き換え
  • __libc_csu_init とかは必要なんだろうか…必要そうでうざい…
  • main はなんか適当に stack の状態とかを起動状態に戻して entry point に jmp

とかになるのかなーと思うんだけど、 libc の初期化ルーチンを自前でリンクするとかめどい…

なんもしない main を書いて、 それを実行バイナリに落として、 必要な部分を自分の ELF binary にコピってくる… みたいな感じで動くんかなぁ。

リンカじゃなくてローダにすべきだった気がしてきた。

今からやるとするとどっちがラクかなー

(23:54)

本日のツッコミ(全1件) [ツッコミを入れる]

_ isshiki [>暗号解読 ボクも数年前に読みました。感想は今となっては小学生の感想文レベルでしか語れないので控えますが、当時思っ..]


2010-08-28

_ 海外旅行

名古屋っぽいもの食いたい。 USB ケーブル無いから GPS 無いのが痛いかな

それはそうといろいろためになったとおもう。なんか忘れそうなんでなにか書いておく。

  • F# は int+float あるん?→無い→これはあると予想して、あるとしたら x+1 から x を int と推論してるのはなんでだろーという疑問だった
  • ins_sort ってリストだと O(N^2)? →そもそも array でも O(N^2) じゃボケ→ぐおおそうだ同じやりとりをほかでもした記憶があるよ…
  • 楽打普通に電卓として便利げ
  • 楽打どうせ Obj. に手を出してるんなら + とか overload してもよさそうな
  • しかしそれをすると電卓としての便利さはなくなる
  • '_a と 'a → 'a は本当になんでもいい。 '_a は一度決まったらそのまま
  • let rec f x = if false then f 1; 2 で x が int になるのが許せない→ f x の定義見てるときは '_a で一旦定義終わって残った '_a は 'a になるんじゃよ
  • πの話を聞いた。昔よりはイメージつかめる気がする
  • 名古屋に何が起きているのか→精力的な人が牽引したのが大きい。組み込みの人の理想と現実みたいななにか
  • なんで OCaml 使ってるん? fun と function とか、 .() と .[] などなどなど… OCaml の文法つらくないすか→意味論とか大事とても大事。文法それほど大事でもないでも意味論だいじ
    • これは C++ とかって const_iterator とかうざくねーといわれたときの自分の反応に近いよなーとか思った。まぁ瑣末なことだと思う
  • overload ほしくないすか→ほしい
  • つか汎用 print は→ほしい。なんか type から generate したりしてる
  • GCaml は→ほしい
  • バックトレース→ある
    • バックトレースフェチとしては今度みる

なんかまだあった気がするけどまぁ

あとは何度も定義読んだであろう Sort モジュールなー


2010-08-29

_ なごや

続き

  • F# とか、 .Net 系言語はゴルフ場に入れていきたいんだけど簡単かな
  • first class module については話だけでは漠然としたイメージだけしかわからなかったんだけど、後で説明を聞くと D の最初の頃の template みたいなものを思い出す感じなのかなー
    • 実装どうなってるかも見たい
  • camlspotter さん話うまくて面白かった。面白かったなーと思って、しかし考えてみると俺 OCaml のコードとか別に検索したくないよなーと気付いて、うまくだまされた
  • FFTW は僕の印象では SSE のうまい使いかたって気がした。昔 SSE で FFT 書いたら勝てた記憶があるんじゃがーという話をしたら、当時は SSE はまだリリースされてなかったんじゃないかとのこと

その後

  • ネカフェでは何故かウシジマくんを読んで陰鬱な気分になることになってるので読んだ。あとは PSYCO+ は何故か面白いと記憶してたんだけど、読むと面白くなくてびっくりした
  • 味噌煮込みうどん。うどんの麺が固いとかなかなかにヘンな物体だなあと思った。でもおいしかったとおもう
  • 名古屋城…の付近で昼寝
  • 名古屋城…の前で武術大会とかが行なわれていて真剣でなんか切ったりしてた。面白かった
  • 名古屋城。シャチホコの実物が見たかった
  • ふらふらと港に
  • 南極に行った船を見たりとかそういう
  • そこらで夕寝
  • 名古屋でひつまぶし喰おうと思ったら並んでたので矢場とんにフォールバック

(23:57)


2010-08-30

_ i agree!

http://planetrubyonrails.com/

Lots of requests to publish Tetsu Soh's memory profiler on Github. I agree! #rubykaigi

どっかにコード無いんかなーと探してたらこれを見つけた。

(01:49)

_ しりとりプログラミング

というのを漠然と考えた。新しい語の導入を許すと

puts sh = "Hello, world!"

とかで一瞬で解決して、許さないとすぐに無理ゲー感がただよってくる。

ていうか hello だけなら

"Hello, world!
".display

とかでたまたま解決したりするし、ゲームとして色々成立しない。

改行を出すのにムダに苦労してみるとか…

"Hello, world!".display
yield Dir rescue eval "loop { puts ; STDERR; raise exit }"

たぶんルールは

  • "Hello, world!".display ではじまる (つか h で終わる単語がない気がする)
  • NameError とか NoMethodError が飛びそうな場所があるとダメ
  • 新しい名前の導入は禁止
  • eval 以外の文字列ダメ。 eval の中でもしりとりする
  • 外部プロセス呼ぶの禁止
  • 同じ名前は使っちゃだめ
  • なるべく短く

とかか。 eval もなんか取ってつけたような感じだから禁止してもいいかも

"Hello, world!".display
yield Dir rescue END { DATA; ARGF; fail loop { puts; STDERR; raise exit } }
true
__END__

偶然だけど、 END fail raise exit と登場して、 true __END__ でシメててなんかかっこいい。

(02:40)


2010年
8月
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
1.isshiki(2010-08-27 03:40) 2.shinh(2010-08-18 12:30) 3.もわ(2010-08-18 09:02)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h