Rails Hell という言葉は聞いたことが無い。
(今俺はそんな感じだけど)
セグウェイなんて羨ましく無いもん。俺なんか SEGVwayだもんね。
40 日。
RubyKaigi2006 のオーディオファイル、ぜひ聞いてやってください。一週間くらい、毎日3時間くらいかけてファイルに落としたので。
http://slashdot.jp/comments.pl?sid=330607&cid=1008554 こんなコメントに +1 が付くのがスラドクオリティか。
http://www.jst.go.jp/pr/info/info332/shiryou2-c2.html
組み込み...。
$ ./miniruby -ve '40.times{|i|s = "*"*i; printf "%02d:%s\n", s.length, s}' ruby 1.9.0 (2006-08-31) [x86_64-linux] 00: 01:* 02:** 03:*** 04:**** 05:***** 06:****** 07:******* 08:******** 09:********* 10:********** 11:*********** 12:************ 13:************* 14:************** 15:*************** 00: 01:* 02:** 03:*** 04:**** 05:***** 06:****** 07:******* 24:************************ 25:************************* 26:************************** 27:*************************** 28:**************************** 29:***************************** 30:****************************** 31:******************************* 32:******************************** 33:********************************* 34:********************************** 35:*********************************** 36:************************************ 37:************************************* 38:************************************** 39:***************************************
最近のRubyは面白い。
ogg ってダメなのー? えー?
Rails の人たちは、大変真面目だということがわかった。しくしく。
(ぼけても、誰も突っ込んでくれない)
4分ってちょっと。すごいなあ。
西尾さんが見ているようなので書いておくと、Python one-liner 変換器を作ればいいと思いました。機械的な変換は難しいのかな?
YARV 開発に役立つ Rails 本、何かないですかね。YARV で Rails、と考えたときに、どうチューンすればいいのかわからないし。
とりあえず、話についていけるようになりたい。 今は、Rubyの話をしてくれないからなぁ。
投票を更新した。
http://www.atdot.net/~ko1/diary/vote.cgi
数日悩んだバグ発見。 バカすぎ。何やってんだ俺。
Dave 曰く、まつもとさんは国宝。
Python で one-liner ならこんなのがあります。 http://www.unixuser.org/〜euske/pyone/index-j.html
機械的な変換も出来るとは思うけど、めんどくさいからヤダ。ワンライナーイクナイ!
手作業でやるほうが面倒だと思うんだが(笑)。
道を切り開くのは楽しいけど、その道を舗装するのは退屈なのですw
どうチューンすれば
大規模ソフトウェア開発について、少し考えていたんだけれど、数百万行にわたる、膨大なソースコードがあった場合、それらは多分ライブラリ化されているんだろうけれど、仕様も膨大だろうから、同じような用途のコードが書き散らされているに違いない。こういう車輪の再発明を防ぐために、司書さん的役割な人(電子的なライブラリに対してツールとしての司書ではなく、専門職としての司書)が居ると、変わるんだろうか。別にめがねをかけていなくても、三姉妹でなくてもいいんだけれど(よくないって?)。
LL.Ring では Make: 01 を買った。
ああいうイベントでの、「時間が無かった」だの「〜〜がうまくいかなかった」だの「段取りが〜」とかの言い訳は、客にとってはまったく不愉快なだけだなぁ、ということを再認識した。気をつけなければ。
instance_of? なんて使ったこと無かったんだけど、Java の isntanceof は kind_of? なんだねぇ。
Ruby -> Javascript 変換は必要ないらしい。ということで、作ってみるかな(天邪鬼)。
じゃんけん2.0 優勝者に教えてもらった。http://www.ofb.net/~egnor/iocaine.html
これを JavaScript で実装したらしい。
IRC ログにタグ付けは出来るのか?
あることを頼まれて、少し調べていたんだけれど、それが不要になったことを全然違う経路で知って、それに関して何一つ連絡をよこさないというのはなんとも不愉快だなぁと思った。気をつけなければ。俺、最近頼むことばかりだもんな。
もしくはライブラリソムリエ。「埋め込み言語の簡易パーザに合わせるなら、こちらの軽い感じのハッシュテーブル実装を」とか「巨大なデータセットには、しっかりとフルボディのmalloc実装を」とかお薦めしてくれるの。
マジレスすると、「ライブラリに本当に必要な仕様は、本体を実装し終わった時にようやくわかる」って場合が多いんで、似たようなライブラリがあっても使いづらいことが多いでしょうね。元の実装者の設計と違う方向で拡張が必要になったりするし。よく知られたアルゴリズムとか、性質が分かってるものなら共有しやすいですが。
発送の元は、「既存のソースコードについて、どこに何があるか把握している人」で、「一切ソースは書かない」という人がいたらどうなるかな、というところでした。聞かれなかったら仕事しなくていい人。
そうか。今はまだ、ソースは生物で、メンテしつづけてないと使えなくなるから、そういう人がいたとしても絶えず変化するコードを追っかけてないとならない→開発の現場にどっぷりないとならない、ってことになりそうだけど。コードのポータビリティが増して、さらにbillion行とかtrillion行単位の資産が出来てきたら、きっとみんな外部仕様だけを頼りにいつ誰が書いたのかわかんないようなコードを使うようになって、そしたら既存のコードだけをサーベイしつづける職種の人がどうしても必要になるかも。
そうそう、excuseは、真実を言っていたとしても、聞く側にとってはまったく不要なんですよね。My English is not very good...とかいうexcuseも、言いたくなるわけだけど、聞く側にしてみると、そんなこたあ聞きたくない、と。
ううぅ、英語だと何時もやっているなぁ orz
「ワンライナーなので編集しづらい」はネタのつもりだったけど、引っ張りすぎたかも。それはさておき司書さんの普段のお仕事はCVSメールを読んで「コメントがわかりにくい」と文句を言ったり、JavaDocを眺めて文句を言ったりすることだと思いました。
激しく手抜きで、ごめんなさい>じゃんけん
いや、あの圧倒的な強さは良かったと思います。
heaps_slot に freelist を設けて、各スレッドはこれを参照するようにすると良いと思った。
つまり、現在の YARV は各スレッドが freelist を持つような実装にしているんだが、各スレッドの freelist を使い切ると、がががーっと root_freelist からある個数分だけとってくる。この時間は無駄なので、heaps_slot 単位で freelist を管理しておいて、スレッドはある heaps_slot の freelist をもらってくる、という。root_freelist は、heaps_slot の free_list のリストになる。
gc_sweep は上記のような処理がすでに入っているので、あとはデータ構造をちょいちょいいじれば終わり。
まぁ、あんまり変わんないかな。わかんないけど。
よくわかってないんだけど、
gc.c の
p->as.free.flags |= FL_SINGLETON; /* freeing page mark */
って、pp-> じゃない?
しかし、final しないといけないオブジェクトがあっても、heaps_slot は開放するような気がするんだよな。これ、なんで SEGV しないんだろう。わかんないなぁ。finalize 用の heap へ RValue をコピーすればいいような気もするんだが、そういうこともしてないしな。バグな気がする。
と、思ったら、final_list があると free_unused_heaps を実行しないのね。なるほど。
十分にグローバルメソッドキャッシュにあたっているのならば、インラインメソッドキャッシュをあてる必要が無いんだなあ。困ったぞ。
まるごとPerl! Vol.1 が届いた。
今回は、関係各者にメールは書かないので、ぜひ [ruby-list:42748] お願い:Rubyist Magazine へのたより にご協力くださいませ。
秋葉原のヨドバシを見ていたんだけど、6FのTVゲームコーナーで、長蛇の列。そこまでして買いたいのかー。
しかし、FF3 超欲しくなってしまった。スクリーンセーバーとかインストールしてるし。ダメすぎ。
プログラミング言語Ruby第二版読書会,なんてやったら人は集まるんだろうか?
初心者講習会の企画を考えていたけど,なかなかまとまらないので.
最近クレクレ君になっているので、大変マズイ。
http://www.mext.go.jp/b_menu/boshu/2006/06081806.htm
是非応募したい。
と言ったら、IRC で
そうやって女の子の理系離れが加速するわけですね。
と言われた。
http://journal.mycom.co.jp/articles/2006/08/23/java7closuer/006.html
面白い記事だったけど、
関数型やローカル関数、クロージャの導入がもたらす弊害は、Genericの場合とよく似ている。クロージャが活用されたソースコードは徐々にC/C++言語に近付いているようにみえる。一見すると関数ポインタのようだ。これはJavaのビギナーにとっては辛いところだろう。
近づいてるのかよ!
どうでもいいんだけど http://www.gihyo.co.jp/magazines/LLFE/support/Vol1 はちょっと恥ずかしい。
どう考えても、近づいてないですよね。関数型言語に近づいているというならともかく。
しかもURLでclosureのつづりを間違えてるし
CLOS user のことじゃない? :p
はじめまして。Rubyビギナーとしては参加したいです! > プログラミング言語Ruby第二版読書会
わたしは某雑誌で「浩二」にされたことがありまする…
要約すると「私には辛い」なのかもw
はじめまして。私も参加したいです! メソッドとかクラスがどうも分からないので > プログラミング言語Ruby第二版読書会
C++もclosure乗せようとしてますしねぇ
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/42064 をスレッドを使わないで実装できるか,という話.
第一稿:
class IO def tee *outs @__tee_outs = outs def self.write *args super @__tee_outs.each{|out| out.write *args } end end end STDOUT.tee(open('/tmp/foo', 'w')) p 1
なんとなく動いているように見えた.が,STDOUT.tee(STDOUT) みたいにすると死ぬと指摘される.うーん.
第二稿:
class IO def tee *outs # check loop visited = {self => true} check_loop = lambda{|o| raise "Loop" if visited.has_key? o visited[o] = true if os = o.instance_variable_get(:@__tee_outs) os.each{|o| check_loop.call o} end } outs.each{|out| check_loop.call(out) } @__tee_outs = outs def self.write *args super @__tee_outs.each{|out| out.write(*args) } end end end STDOUT.tee(STDOUT) p 1
とりあえずループの検出だけ.現実的には十分?
職員用ポータルに、一太郎の脆弱性が掲載されていた。
http://d.hatena.ne.jp/secondlife/20060822/1156253957
私の周りは誰も使ってくれない htmlhelp で,私のような htmlhelp 好きは普段は迫害されているんですが(言いすぎ),secondlife さんのような影響力のある方が書くと,きっと違った反応が返ってくるに違いない.
ところで,作った HTMLHelp の公開って,ライセンス的にどうなのかわからないので公開できません.GNU のソフトの texinfo は大量に変換してるんですが,誰か教えてくれませんかね.
texi2html4hh (Sun Aug 06 07:35:52 JST 2006) JM.chm (Mon Aug 07 16:43:29 JST 2006) R-lang.chm (Sun Aug 06 07:40:47 JST 2006) SUSv3.chm (Mon Aug 07 15:38:30 JST 2006) autoconf-ja.chm (Sun Aug 06 07:38:17 JST 2006) autoconf.chm (Sun Aug 06 07:35:43 JST 2006) bc.chm (Sun Aug 06 07:40:37 JST 2006) bfd.chm (Sun Aug 06 07:42:15 JST 2006) binutils.chm (Sun Aug 06 07:42:15 JST 2006) bison.chm (Sun Aug 06 07:40:37 JST 2006) classpath-hacking.chm (Sun Aug 06 07:40:22 JST 2006) classpath-vmintegration.chm (Sun Aug 06 07:40:22 JST 2006) cpp.chm (Sun Aug 06 07:38:07 JST 2006) cppinternals.chm (Sun Aug 06 07:37:20 JST 2006) cvs-ja.chm (Sun Aug 06 07:38:37 JST 2006) diff-ja.chm (Sun Aug 06 07:38:22 JST 2006) elisp.chm (Sun Aug 06 07:35:28 JST 2006) eljman.chm (Sun Aug 06 07:36:30 JST 2006) emacs.chm (Sun Aug 06 07:38:55 JST 2006) emacsj.chm (Sun Aug 06 07:39:15 JST 2006) fileutils-ja.chm (Sun Aug 06 07:38:31 JST 2006) find-ja.chm (Sun Aug 06 07:38:32 JST 2006) flex-ja.chm (Sun Aug 06 07:35:52 JST 2006) gauche-0.8.6-src.chm (Sun Aug 06 08:33:36 JST 2006) gauche-refe-0.8.4.chm (Sun Aug 06 07:40:05 JST 2006) gauche-refe-0.8.6.chm (Sun Aug 06 07:42:14 JST 2006) gauche-refe-0.8.7.chm (Sun Aug 06 08:35:28 JST 2006) gauche-refj-0.8.4.chm (Sun Aug 06 07:39:42 JST 2006) gauche-refj-0.8.6.chm (Sun Aug 06 07:41:59 JST 2006) gauche-refj-0.8.7.chm (Sun Aug 06 08:35:13 JST 2006) gawk-j.chm (Sun Aug 06 07:41:01 JST 2006) gcc-4.0.2.chm (Sun Aug 06 07:42:38 JST 2006) gcc-4.1.1.chm (Thu Aug 17 18:38:59 JST 2006) gcc-j.chm (Sun Aug 06 07:37:20 JST 2006) gcc.chm (Sun Aug 06 07:37:49 JST 2006) gccint.chm (Sun Aug 06 07:38:03 JST 2006) gcj-ja.chm (Sun Aug 06 07:35:52 JST 2006) gcl.chm (Sun Aug 06 07:41:35 JST 2006) gcov.chm (Sun Aug 06 07:37:20 JST 2006) gdb-ja.chm (Sun Aug 06 07:36:06 JST 2006) gdbm.chm (Sun Aug 06 07:40:23 JST 2006) gettext.chm (Sun Aug 06 07:42:24 JST 2006) gforth.chm (Sun Aug 06 07:40:32 JST 2006) gsl-ref.chm (Sun Aug 06 07:40:22 JST 2006) gst.chm (Sun Aug 06 07:39:20 JST 2006) hurd.chm (Tue Aug 08 02:44:31 JST 2006) latex2e.chm (Sun Aug 06 09:34:21 JST 2006) libc.chm (Sun Aug 06 07:37:01 JST 2006) libiberty.chm (Sun Aug 06 07:42:19 JST 2006) libtool-ja.chm (Sun Aug 06 07:38:27 JST 2006) libtool.chm (Sun Aug 06 07:40:42 JST 2006) make.chm (Sun Aug 06 07:35:52 JST 2006) onlisp.chm (Tue Aug 08 02:44:33 JST 2006) r5rs.chm (Sun Aug 06 07:35:52 JST 2006) r5rsj.chm (Sun Aug 06 07:36:07 JST 2006) readline.chm (Sun Aug 06 07:40:37 JST 2006) riece-ja.chm (Sun Aug 06 09:34:22 JST 2006) ruby-1.9.0-src.chm (Sun Aug 06 08:31:59 JST 2006) screen.chm (Sun Aug 06 07:42:14 JST 2006) sed-ja.chm (Sun Aug 06 07:38:32 JST 2006) sicp.chm (Sun Aug 06 08:28:38 JST 2006) termcap.chm (Sun Aug 06 07:40:37 JST 2006) texinfo.chm (Sun Aug 06 07:35:37 JST 2006) tput.chm (Sun Aug 06 07:40:42 JST 2006) vmgen.chm (Sun Aug 06 07:40:23 JST 2006) wl-ja.chm (Sun Aug 06 09:34:27 JST 2006) zsh.chm (Sun Aug 06 07:36:21 JST 2006) man.css (Sun Aug 06 08:35:32 JST 2006) 2sjis.rb (Mon Aug 07 15:46:33 JST 2006) chmbuilder.rb (Mon Aug 07 15:46:33 JST 2006) euc2sjis.rb (Sun Aug 06 08:35:32 JST 2006) makegauchehelp.rb (Sun Aug 06 08:35:32 JST 2006) man2hh.rb (Mon Aug 07 15:46:33 JST 2006) mkhelp.rb (Sun Aug 06 09:34:22 JST 2006) mksusv3.rb (Mon Aug 07 15:46:33 JST 2006)
今こんな感じ.
最近はRubyの人と思われていないのかもしれない.うーむ.
よくWeb上でのチャットなんて出きるなぁ.
と思ったんだけど,長文の貼り付けとかは便利かもしれない.
ゴゴる,という言葉をみて,あぁ,あれみたいなポーズとったりするのかな,とか思った眠れない早朝.眠すぎ.
8sec leaq 8(%r14), %rax movq 8(%r15), %rcx addq $8, 8(%r15) movq (%rax), %rsi movq %rax, %r14 movq %rax, (%r15) movq 48(%r15), %rax movq -16(%rax), %rax movq %rax, (%rcx) jmp *%rsi 10sec movq 48(%r15), %rax movq 8(%r15), %rsi leaq 8(%r14), %rcx addq $8, 8(%r15) movq %rcx, %r14 movq %rcx, (%r15) movq -16(%rax), %rax movq %rax, (%rsi) movq (%rcx), %rax jmp *%rax 6sec leaq 8(%r14), %rsi movq 8(%r15), %rdi addq $8, 8(%r15) movq (%rsi), %rax movq %rsi, %r14 movq %rsi, (%r15) movq %rax, 296(%rsp) movq $2, 296(%rsp) movq 296(%rsp), %rdx movq 48(%r15), %rax salq $3, %rdx subq %rdx, %rax movq (%rax), %rax movq %rax, (%rdi) movq (%rsi), %rax jmp *%rax
最後のが一番速い(6秒)。謎過ぎる。
いろいろ考えたけど、やっぱりわからないのでもういいや。
これ以上なんとかするには VTune かなんか使わないとだな。
しかし、こんなデータがあると、チョコチョコとチューニングしているのが空しくなってくる。
物欲がふつふつと湧いてきて,職場で利用中のS2410Wを買ってしまおうか悩み中.うーむ,どうしよう.
というわけで,T565(CRT 17インチ)が余るんですが,誰か要りませんかね.まだまだ発色もよい良品だと思うんですが,いかんせんでかい.
しかし,ボーナスとかあるんだったら,これを機会に買うかー,とか思うんだろうけど....
しかし,費用対効果を考えると,あったほうがよいような気がするな.たとえ家にあんまり帰ってなくても.
http://slashdot.jp/comments.pl?sid=329051&cid=999699
「使って欲しい,と思っている」と思っているんだろうか.ユーザは,開発者のことをそう見ているのか.
いや,使って欲しい気もするが,なんか違和感を覚えたもので.
なんとなく,MRTG の結果を毎日 HTML メールで受け取れたら幸せになれないか知らん,と思って
require 'rmail' message = RMail::Message.new message.header['To'] = 'ko1@atdot.net' message.header['Subject'] = "MRTG Result (#{Time.now})" message.header['Content-Type'] = 'Multipart/Related' m1 = RMail::Message.new m1.header['Content-Type'] = 'text/html; charset="iso-8859-1"' m1.body = body = File.read('mrtg のパス/index.html') message.add_part m1 Dir.glob('mrtgのパス/*-day.png'){|file| fn = File.basename(file) m = RMail::Message.new m.header['Content-Type'] = "image/png; filename=#{fn}" # m.header['Content-Disposition'] = "inline; filename=#{fn}" m.header['Content-Transfer-Encoding'] = 'base64' m.header['Content-ID'] = "<#{fn}>" body.gsub!(fn, "cid:#{fn}") m.body = open(file, 'rb'){|f| [f.read].pack('m')} message.add_part m } puts RMail::Serialize.write('', message)
こんなのを書いてみる.全部見よう見真似.
やっぱり初心者って難しい。
rss bot: 赤いソバの花「高嶺ルビー」涼しげ 長野・木曽 - http://www.asahi.com/life/update/0819/007.html?ref=rss
x64のプロセッサでYARVで実装していた最適化技術が利かないという衝撃的な事実。おかしぃなぁ。昔は効いたんだけどなあ。
試してみると、オペランドのフェッチはあったほうがよいという感じ。というか、現在のメモリどかどか使うモデルは、D-cache に効いてしまうので、やめたほうがいいのか。constant-pool 参照モデルのほうがヨサゲ、という話でした。
しかしなぁ。constant-poolをさすポインタはどこにあるんだ。
rdoc はよく知らない(riとか使わない)のだけれど,きっと私の書くRubyコードはrdocに嫌われそう.
で,rdocがきちんと解釈してくれないようなソースコードじゃないと困る,ということに,世間一般的に捉えられると,私の書くコードはRubyのコードじゃない,とか言われるんだろうか.
そんな感じでRubyの〜〜はこうするべきだ,というような方向に持っていくのもいいなぁ.
http://journal.mycom.co.jp/articles/2006/06/28/isca/001.html
ウイスコンシン-マディソン大のSohi教授のグループの発表は、マルチコアの2次キャッシュの管理に関する論文で、各プロセサコアに独立な2次キャッシュを持つが、それらの2次キャッシュ間で共通のディレクトリを持ち、他コアのキャッシュにデータがある場合はそこから転送したり、キャッシュラインを追い出す場合にも、再利用の可能性の高いデータは、メモリではなく他のコアのキャッシュに追い出したりというような制御を行い、性能を改善する方法を提案している。
ディレクトリってなんだろ.
で,こういう話を提案して,作ってくれって言ってたのに結局やってもらえなかった修士時代.やっぱり,こういうことできたんだよなあ.
lock の評価。衝突しないことが保障されている、シングルスレッドでの純然たるオーバヘッドを図ってみた。
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #define MAX 0x3000000 void lock_mutex() { int i; pthread_mutex_t mutex; pthread_mutex_init(&mutex, 0); for (i=0; i<MAX; i++) { pthread_mutex_lock(&mutex); pthread_mutex_unlock(&mutex); } } void lock_spin() { int i; pthread_spinlock_t lock; pthread_spin_init(&lock, 0); for (i=0; i<MAX; i++) { pthread_spin_lock(&lock); pthread_spin_unlock(&lock); } } void lock_rw_read() { int i; pthread_rwlock_t lock; pthread_rwlock_init(&lock, 0); for (i=0; i<MAX; i++) { pthread_rwlock_rdlock(&lock); pthread_rwlock_unlock(&lock); } } void lock_rw_write() { int i; pthread_rwlock_t lock; pthread_rwlock_init(&lock, 0); for (i=0; i<MAX; i++) { pthread_rwlock_wrlock(&lock); pthread_rwlock_unlock(&lock); } } void err(char *str) { fprintf(stderr, "%s", str); exit(1); } int main(int argc, char *argv[]) { if (argc != 2) { err("arg error\n"); } else { switch(*argv[1]) { case 'm': lock_mutex(); break; case 's': lock_spin(); break; case 'r': lock_rw_read(); break; case 'w': lock_rw_write(); break; default: err("unknown option"); } } return 0; }
結果 on Linux 2.6.16-1.2122_FC5 #1 SMP Sun May 21 15:01:10 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
mutex real 0m3.288s user 0m3.288s sys 0m0.000s spin real 0m1.579s user 0m1.580s sys 0m0.000s read real 0m5.724s user 0m5.724s sys 0m0.000s write real 0m5.885s user 0m5.884s sys 0m0.000s
結果 on FreeBSD 6.1-RELEASE #0: Sun May 7 04:15:57 UTC 2006 root@bloom.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP amd64
gcc -lpthread
mutex 10.77 real 10.76 user 0.00 sys spin 3.48 real 3.47 user 0.00 sys read 26.41 real 26.37 user 0.00 sys write 29.42 real 29.38 user 0.00 sys
同じマシンなのに、FreeBSD の pthread は遅いなぁ。
gcc -lthr でコンパイルしてみる。
mutex 4.15 real 4.15 user 0.00 sys spin 3.30 real 3.30 user 0.00 sys read 9.57 real 9.56 user 0.00 sys write 12.74 real 12.72 user 0.00 sys
・・・なんで 1:1 モデルのほうが速いんじゃー! なんで? ほんとにわからん。
ちなみに、-lc_r は spin 関係が無いようだったので出来なかった。
FreeBSDには <machine/atomic.h> なんて素敵なものがあったので、使ってみた。
#include <machine/atomic.h> inline int native_lock(volatile int *dst) { while (atomic_cmpset_int(dst, 0, 1) == 0) { sched_yield(); } } inline int native_unlock(volatile int *dst) { *dst = 0; }
結果、
mutex 4.15 real 4.15 user 0.00 sys spin 3.30 real 3.30 user 0.00 sys read 9.06 real 9.05 user 0.00 sys write 12.62 real 12.61 user 0.00 sys native 1.97 real 1.96 user 0.00 sys
spinとの差は、関数呼び出しのコストかね。
ところで、unlock は *dst = 0 だけでいいと思うんだが、libthr のソースを見ると、ここでも不可分命令を使っている。なんでだろう。
で、atomic.h を Linux で使って、無理やり見てみると、
mutex real 0m3.181s user 0m3.180s sys 0m0.000s spin real 0m1.580s user 0m1.580s sys 0m0.000s read real 0m6.156s user 0m6.156s sys 0m0.000s write real 0m6.259s user 0m6.256s sys 0m0.000s native real 0m1.537s user 0m1.540s sys 0m0.000s
pthread_spinlock_* と変わらない。ふーむ、なら手作業でアセンブラいじる必要は無いか。
とか,こんなことをしていたら http://d.hatena.ne.jp/shinichiro_h/20060817#1155781747 を見つけてしまった.なんてタイムリー.というか,gcc 4.1.1 かよ! あわてて chm を作って,確認.おお,なんかたくさんある.
というわけで、作り直してみる。
inline int native_lock(volatile int *dst) { while (__sync_bool_compare_and_swap(dst, 0, 1) == 0) { sched_yield(); } }
結果 on Linux 2.6.16-1.2122_FC5 #1 SMP Sun May 21 15:01:10 EDT 2006 x86_64 GNU/Linux / gcc version 4.1.1 20060525 (Red Hat 4.1.1-1) / Intel(R) Pentium(R) D CPU 3.46GHz
real 0m1.464s user 0m1.464s sys 0m0.000s
おお。なんかヨサゲ。
00000000004009d0 <native_lock>: 4009d0: 48 89 5c 24 e8 mov %rbx,0xffffffffffffffe8(%rsp) 4009d5: 48 89 6c 24 f0 mov %rbp,0xfffffffffffffff0(%rsp) 4009da: 48 89 fb mov %rdi,%rbx 4009dd: 4c 89 64 24 f8 mov %r12,0xfffffffffffffff8(%rsp) 4009e2: 31 ed xor %ebp,%ebp 4009e4: 48 83 ec 18 sub $0x18,%rsp 4009e8: 41 bc 01 00 00 00 mov $0x1,%r12d 4009ee: eb 05 jmp 4009f5 <native_lock+0x25> 4009f0: e8 33 fe ff ff callq 400828 <sched_yield@plt> 4009f5: 89 e8 mov %ebp,%eax 4009f7: f0 44 0f b1 23 lock cmpxchg %r12d,(%rbx) 4009fc: 75 f2 jne 4009f0 <native_lock+0x20> 4009fe: 48 8b 1c 24 mov (%rsp),%rbx 400a02: 48 8b 6c 24 08 mov 0x8(%rsp),%rbp 400a07: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 400a0c: 48 83 c4 18 add $0x18,%rsp 400a10: c3 retq
こんな感じになった。
inline int native_lock(volatile int *dst) { while (__sync_lock_test_and_set(dst, 1) != 0) { sched_yield(); } }
こうしてみると、結果はあんまり変わらなくて、
00000000004009d0 <native_lock>: 4009d0: 55 push %rbp 4009d1: bd 01 00 00 00 mov $0x1,%ebp 4009d6: 53 push %rbx 4009d7: 48 89 fb mov %rdi,%rbx 4009da: 48 83 ec 08 sub $0x8,%rsp 4009de: eb 05 jmp 4009e5 <native_lock+0x15> 4009e0: e8 43 fe ff ff callq 400828 <sched_yield@plt> 4009e5: 89 e8 mov %ebp,%eax 4009e7: 87 03 xchg %eax,(%rbx) 4009e9: 85 c0 test %eax,%eax 4009eb: 75 f3 jne 4009e0 <native_lock+0x10> 4009ed: 48 83 c4 08 add $0x8,%rsp 4009f1: 5b pop %rbx 4009f2: 5d pop %rbp 4009f3: c3 retq
・・・あれ? lock しないでいいの? xchg 命令は勝手に atomic にやってくれるのか。
そういうわけで、Parallel YARV は GCC 4.1.1 以上対応にしておこう。
そういえば、最近暑くて、でも俺の寝ている部屋にはエアコンが無くて。寝付けない感じ。
どうも、LL/SC に慣れすぎちゃって、CAS の考え方って慣れないな。オーバヘッド高そうで。
if foo in bars
は,
if bars.include? foo
と同じとみなせばいいのかしらん.でも,特別視することもないような気がするな.
[ruby-list:42682] からのスレッドを見て,class/module のスコープが抜けたときに呼ばれるメソッドがあってもいいな,と思った.
class Foo # ... end # ここで呼ばれる
class_closed とかかな.で,呼ばれたときに必要なメソッドがあるかどうかをチェックすれば良い.悪くないと思うんですが,どうですかね.
せみの声が聞こえる.
apache がなんか刺さるようになってる.どうしてだろう.w3ml.cgi が犯人? CGI が犯人って....
来週,essaさんインタビューをやるんですが,野次馬は誰がいいんだろう.
あぁ,夕飯どうしようかな.
結局ラーメン屋になった.にんにく入れすぎた.
C#/.NETにて、あるコントロールに来たメッセージ(キーボード入力)を別のコントロールにそのまま投げるにはどうすればいいんだろう。
New in Parrot 0.4.6: - New languages: Ruby ("Cardinal"), Javascript ("ecmascript")
うは。
キーボード入力によって反応するメソッドを用意しておいてそれを呼び出す。(というか仕様を見直す)
エディットボックスでUp/Downを押すと、隣のコンボボックスのエントリを上下したかったんです。楽できないかな、って。
その程度なら問題なさそうです。ProcessDialogKeyかPreProcessControlMessageをオーバーライドしてキーの値を見てコンボボックス側へ委譲してやれば良いのでは。
委譲する部分がわからないのですー.
どっちもpublicメソッドだから、combBox1.ProcessDialogKey(msg); とかしてやればいいんじゃない? どっちが利用できるかはトライ&エラー。
RFC をどかっとダウンロードしたが、HTMLに変換するものを見つけることが出来なかった。どうしたもんだか。
この日記のGoogleの検索キーワードに「学位がとれない」というのがあって凹む。
明日は某所で計画停電になり、atdot.net が止まります。メールなどが届かない恐れがありますのでご容赦ください。
うぅ、一度も自動的に再起動したことが無いんだよな。
HTML Help をひくためのを久々に VC++ を使って書いた。
... 使いづらいかも。
計算機初学者に ActiveScriptRuby を使わせる場合、どのように Ruby スクリプトを実行してもらうのがよいか。
■(1) パスを設定してもらう
ruby コマンドが利用可能になる。
パスの設定をやってもらわなければならない。
■(2) ruby console で実行して、ディレクトリを移る
毎回ディレクトリ変更の手間がかかり、面倒くさい。
■(3) 関連付けられているので、foo.rb と入力させて直接実行
一番楽だけど、「ruby foo.rb」とやってください、という入門書が多い現状では、混乱のもとになるのでは。
■(4) cscript foo.rb と入力させる
cscript って何さ! という疑問大爆発。
■(5) スタートメニューにある「ruby console」ショートカットをスクリプトを格納したディレクトリに置いて、毎回これを叩いて起動する。
DOS窓を立ち上げて、cd する手間がなくて、個人的には本命だが、「ruby console」ショートカットのコピーがきちんとできるかどうかが謎。
■(6) あきらめて One Click Installer を使う
ううむ。環境変数弄られるの嫌なんだよな(評価したくない)。
あ、デスクトップに「ruby console」ショートカットはできるんだな。これならコピーしてもらうのは簡単かも。
Windowsの人用。
* Windowsの場合 ** ActiveScriptRuby のインストール (1) 下記のページ(*1)冒頭にある「ActiveScriptRuby 1.8.4.5」というリンクを たどり、「ActiveRuby18.msi」をダウンロードする。 *1: COM Meets Ruby http://arton.hp.infoseek.co.jp/indexj.html (2) ダウンロードした「ActiveRuby18.msi」を起動し、インストールを開始する。 インストール手順については、とくに気にする必要はなく、「Next」などのボタ ンを押せば進んでいくが、途中のライセンス条項については同意してから次へ進 むこと。 (3) スタートメニューの「プログラム」に「Ruby 1.8」が登録されていることを 確認する。 (4) デスクトップに「ruby console」というプログラムが出来ていることを確認 する。 ** ActiveScriptRuby の利用 *** 対話型Ruby実行環境irbの利用 (1) 「スタート」メニューの「プログラム」から「Ruby 1.8」>「irb」を選ぶ とirbコンソールが起動する。 (2) 「1+2」のような簡単なRubyプログラムを入力し、改行して、答えの「3」が 表示されることを確認する。 (3) 終了する場合は「exit」と入力する。 *** Rubyスクリプトを実行 (1) Ruby スクリプトを記述したファイル(例としてc:\script\sample.rb)を用 意する。 (2) デスクトップにある「ruby console」というプログラムを起動する。 (3) 「ruby c:\script\sample.rb」と入力する。これにより、sample.rbプログ ラムが実行される。 (*) おまけ:「c:\script\」ディレクトリにデスクトップにある「ruby console」 というファイルをコピーしておき、そのコピーしたファイルを利用するようにす れば、「ruby sample.rb」という入力のみでRubyスクリプトを実行することがで きる。 ** ActiveScriptRuby のアンインストール (1) コントロールパネルの「プログラムの追加と削除」から「ActiveRuby 1.8.4.5」を選択して「削除」を選択する。
なんか最近、論文偏重というか。論文を書くために空回っている感じ。駄目駄目。
ruby console のプロパティで「作業ディレクトリ」にディレクトリを指定しておく。
SUSv3 を(略)。
しかし、どうなんだろうな、これ。情報が膨大スギ。とりあえず、JM.chm と併用してみて考えよう。
しかし、さすがに公開できないよな。
HTMLHelp API を使えば、man みたいなことが簡単にできるかと思ったらそうでも無かった。
というわけで、どういうふうにすればよいかわからん。うーむ。
ヘルプの起動>キーワードタブの選択>キーワードの入力>リターン
の手間を省ければいいだけなんだが。
JavaDoc を HTMLHelp化したら、25MB になった。でかー。
未踏池田さん飲み。気づいたら12時だった。家に帰れなかった...。
うさんくさいかなぁ(ページが汚いってのはあるとは思うけど、個人的にはno-ip.infoドメインよりは遥かにましだと思うし。それはそれとして署名問題はそのうち出てくるはず)。更新頻度ががくっと落ちたらVectorに入れようかとか思ってたけどそうもならなそうだし。 ということで、投票かな。1. 問題なし 2. arton.no-ip.info 使え 3. RubyForge(One Clickとバッティングしてるような) 4. Vector 5. おれ(誰?)のとこ使え 6. その他
私の感覚だと胡散臭い感じ。artonさんを知っている人だといいのですが、配布対象がホビーな人たちではないので。やっぱり形は大事だなあ、と。
署名の問題はASRに限らずありそうですね。
ruby-lang.org のアカウントを貰って配布なんてどうですかね。rubyist.net とか。
るびまの「Rubyの歩き方」って、そういう用途のために準備したんじゃないの?
「Rubyの歩き方」の言い訳という位置づけです。
うう、眠い。
Gauche の CVS 版をビルドしようと思ったら出来なかった。はてな。
しょうがないので 0.8.7 をビルド。
Windows で riece を使いたいという変態のために、riece-ja.chm を作っておいた。
Windows で wl を(略)。
Windows で LaTeX2e を(略)。ってそれは別に変態じゃない。
うう、こんなものがあったのか。もっと早く作っておけばよかった。
残念ながらファイル名は [ej] じゃないです。
Windows で man を(略)。JM を HTML Help にまとめてみた。使いやすいのかどうか、これから考える。
コマンドラインで特定単語を「キーワード検索」へ持っていく方法って無いのかな。作ればできる? 作らないとできない? WinKey + R で man foo とやると、foo を表示するようにしたい。
HTML Help API を叩くちっちゃなプログラム作らないといけないkなあ。
ruby-lang.orgはやめるべきだと思います(あそこで配布するとオフィシャルなパッケージと思われそうだし、他のパッケージ作成者の意欲を削ぐかも知れない。それはWin32メンテナの(う)さんのzip―色がついていない―であるべきだと思います)。でも、rubyst.net に置かして頂けるなら大歓迎です。
そもそも「オフィシャルなパッケージ」がないのも問題のような。
そろそろ日本語、英語に対応したワンクリックインストーラが必要なんではないでしょうか。
ワンクリックインストーラで使っているインストーラ作成プログラムってメッセージの入れ替えの手間はどんなもんなんでしょうか?
「たのしいRuby」第二版を(インチキして)いただいた。はじめてまともに読んだけど、これ計算機初学者、プログラミング初学者にはつらい内容だと思った。Pickaxe 入門って感じがした。
というわけで、「Ruby でプログラミングを始めたいと思うんです」という人に勧めるには、「初めてのプログラミング」なのかなぁ。
ところで、まつもとさんが「初心者の気持ち」云々と帯に書いてあったのには笑った。
Rubyインストールのためのメモ。一般向けではありません。 * 前提 Rubyインタプリタはソースコードとして提供されています。しかし、実際問題バ イナリ配布をしないと使いづらいという問題があり、有志によっていくつかバイ ナリパッケージが配布されています。 この状況は、Linux における、RedhatやSUSE、Debianなど、いくつもLinuxディ ストリビューションがあることに相当します。 * ソース Rubyインタプリタの最新版のソースコードは http://www.ruby-lang.org/ から ダウンロード可能です。 * Windows WindowsでRubyを使うには、主に4つの方法があります。 a. ActiveScriptRubyを利用 http://arton.hp.infoseek.co.jp/indexj.html arton氏が作った日本人/日本語によるRubyバイナリインストーラの配布です。配 布ページやインストーラが日本語、便利な標準添付ライブラリ以外のライブラリ の添付などが特徴です。 ただし、無料ウェブスペースを利用しているため胡散臭いとか、「ActiveScript って何?」と疑問に思ってしまう、というような問題があります。 ActiveScriptとは、Windowsのスクリプト拡張に関しての用語で、たとえば Windows Scripting HostやInternet ExploreなどからRubyが利用できるようにな ります(もともと、これを行うために作ったそうです)。 b. One-Click Ruby Installerwoを利用 http://rubyforge.org/projects/rubyinstaller/ 海外で開発されているRuby用Windowsバイナリです。英語での情報ばかりですが、 とてもたくさんのRubyライブラリが同梱されています。 c. cygwin のパッケージを利用 cygwinのsetup.exeを利用して、他のパッケージをと同じようにRubyインタプリ タが簡単にインストールできます。ただし、a, bとは違い、標準添付ライブラリ しか付属していません。 普段からcygwinを利用している人にとっては一番簡単だと思いますが、たいてい の人にはcygwinは不要だと思いますので、一般的ではないでしょう。 d. 自分でソースからビルドしてインストール Microsoft Visual StudioやMinGW、Cygwinなどのコンパイラ、開発環境を用いて ソースファイルからインストールできます。ただし、それらのコンパイラの知識、 およびRubyインタプリタのビルド手法についての知識が要求されます。これを選 ぶ人には、とくに説明は要らないでしょう。 * Mac OSX 最初からインストールされているようです。 * Linux Linux 環境では、gccなどの開発環境がインストールされている、もしくはセッ トアップするのが容易であろうと思われるため、自分でソースからインストール するのもそんなに難しくありません。 ただし、最近はLinuxディストリビューションがパッケージ管理ツール(aptや yumなど)を持っているため、それを利用してRubyパッケージをインストールす るのが簡単です。 * その他 少し古いですが、「Ruby インストールガイド」というページがまとめられてい ます(http://www.ruby-lang.org/ja/install.cgi?cmd=view;name=top)。
なんとなく、必要になったのでまとめてみた。
ASR はページとか、なんとなく胡散臭い感じ(偏見)があるので、そこさえクリアしてしまえばいいんだろうなぁ。
上記は、少なくない計算機初心者に、Rubyをインストールさせるための方法をちょっとまとめて、と言われたので、その前段階としての資料として用意してみた。
一番いいのは、ASRのミラーで、「ここからダウンロードしれ」と書いておくことかなぁ。
しかし、未だに ASR をインストールしたことが無い人。
あと、RDEをインストールしてもらうかどうかは、どうなんだろうな。やっぱりあったほうがいいのかな。
あと、HTMLHelp。
うさんくさいかなぁ(ページが汚いってのはあるとは思うけど、個人的にはno-ip.infoドメインよりは遥かにましだと思うし。それはそれとして署名問題はそのうち出てくるはず)。更新頻度ががくっと落ちたらVectorに入れようかとか思ってたけどそうもならなそうだし。 ということで、投票かな。1. 問題なし 2. arton.no-ip.info 使え 3. RubyForge(One Clickとバッティングしてるような) 4. Vector 5. おれ(誰?)のとこ使え 6. その他
るびまの「Rubyの歩き方」って、そういう用途のために準備したんじゃないの?
東京に戻ってきた。
高知城に少し行ってきたが、汗だくの足ガクガク。
なんていうか、金使いすぎ。
3万円弱。うう。
RubyConf の日本人参加者って、今年はもしかしてとても少ないのか?
PTT に行きたかったんだが、行けなかった。残念だ。
正直やばいんで誰か助けてください。
第39回情報科学若手の会の開催、および申し込み締め切りの延期につ いてご連絡をさせて頂きます。重複して受け取られた方はご容赦くださ い。 今年度の情報科学若手の会の参加枠に、まだ余裕がありますので、参 加募集の締め切りを一週間延期いたしました。若手研究者の方は是非ご 参加をご検討ください。若手はちょっと、という諸先生方においては、 お近くの学生の方々へご周知頂ければ幸いです。 また、発表枠もまだ残っておりますので、そちらについてもご検討く ださい。 以上、よろしくお願いします。 ----------------------------------------------------------------- 第39回情報科学若手の会開催のご案内 情報科学若手の会は,情報科学に携わる学生,若手研究者,社会人の ディスカッションと交流の会です.幅広い分野から参加者を募り,互い の交流を深めることで新たな発想が生まれることを目指しています. インフォーマルな雰囲気ですので.これから研究を始めるという方も是 非ご参加下さい. 詳細は,情報科学若手の会のWeb ページをご覧ください. http://wakate.aitea.net/ 限られた時間ですが,この会が有意義なものになるよう,皆様のご参 加をお待ちしております. なお,今年度の招待講演は筑波大学の前田敦司先生をお迎えする予定 です. 招待講演者: 筑波大学 大学院 システム情報工学研究科 コンピュータサイエンス専攻 助教授 前田敦司先生 日時: 2006年9月16日(土)〜18日(月) 二日間のみの参加も可能です.参加申込みの際に併せてご連絡 ください. 会場: 富士CALM (山梨県富士吉田市) http://www.mfi.or.jp/fujicalm/index.htm (無線Lanなど利用可能です) 定員: 30 名 参加費(食費・宿泊費込): 学生15,000 円,社会人18,000 円 (遠方からの参加者には交通費補助をする予定です) 参加申込み: 参加希望の方は下記の情報を参加申込みアドレスにお送り下さい. - 氏名,性別,所属(学生の場合学年も),メールアドレス, 出発都道府県 - 参加者として氏名・所属をWeb 上に掲載してもよいか (運営の都合,参加者に配布される名簿には名前・所属に 関しては必ず掲載させていただきます.) - 宿泊の部屋割りにあたって,喫煙の考慮が必要な方はその旨 - 食事にあたってアレルギー等がある方はその旨 - 発表をしていただける方はその旨(可能であれば題目,要旨) 参加申込み先アドレス: attend2006@wakate.aitea.net 申込み締切り: 一週間延期しました: 2006年8月8日 (火) (締切り前でも定員になり次第,締切らせていただきます) 主催: プログラミングシンポジウム委員会 情報科学若手の会幹事: 上坂明未(フェリス女学院大学) 笹田耕一(東京大学) 鈴木宏哉(慶應義塾大学) 松浦知史(奈良先端科学技術大学院大学) 松田耕史(東京工業大学) 三輪誠(東京大学)
幸いなことに、OSS かいてます。多分。書いても怒られない。
わぉ、Rails やってんだぁ
いや、やってませんけど、Railsわからないと会話が出来ないというのが。