def foo msg = yield p msg end foo{ "foo" }
今日出来て感動したこと。
ワンライナーと言われたから短くしたのに、みんな長いよ!
いいなぁ、と思ったやつはどちらも完売だった。
ドキドキ。
何事も無かったかのように職場にきたら、正面玄関が閉まっていた。
大学のサークルの同期と忘年会で5千円のランチ。今年一番の贅沢? 蟹ってあんなに食べるの楽だったんだ。
http://www.atdot.net/sp/view/p5w2bj/graph
simple paste にグラフ生成機能を追加。主に俺しか便利にならない。
これは、こんなプログラムで要素数を変えていったもの:
require 'benchmark' def m print Benchmark.measure{ yield }.real, "\t" end def main n ary = nil sum = max = nil n = n.to_i m{ ary = Array.new(n){|i| ((i % 2) == 0 ? -1 : 1) * i } } m{ sum = ary.sum } m{ max = ary.max } p [sum, max] if $DEBUG end #################################### class Array def sum s = i = 0 len = self.length while i<len s += self[i] i += 1 end s end end main(*ARGV)
もうちょっと人の役に立つものは作れないかねぇ。
職場。空調が入らないのでとても寒くなってきた。
考えてみると、Ruby でパイプライン処理を行っていくようなものって思いつかないんだよな。そんなものイラネ、なのかなあ。
map reduce の map って hash だよなぁ。やっぱ ruby っぽく hash で ...。うーん。
パイプラインじゃないけど。
計算時間の謎。
require 'benchmark' def m print Benchmark.measure{ yield }.real, "\t" end n = ARGV[0] ary = nil sum = max = nil sign = 1 ary = Array.new(n.to_i){|i| sign *= -1; i * sign} m{ sum = ary.inject{|r, e| r + e } }
こんなプログラム、つまり、配列の要素の総和をとる、というプログラム。
計算時間の結果: http://www.atdot.net/fp_store/5wg0bj.file/graph.png
計算時間を見ると、どうやら2次関数(以上?)に近似しているように見える。なんで?
[-1, 2, -3, 4, ...] という配列なので、総和が Bignum になることもないので Fixnum で収まっているように見える。
inject で配列を見ていくとき、なんかへんなことしてるのかしら。
なんだGoogleAlertって。YARVという単語にひっかかってまつもとさんの itmedia の記事の内容が飛んできたんだが。こんな設定した覚えが無いなあ。
勝手にgmailの内容や検索結果からアラート対象単語を抽出していたら、それはとても恐ろしい気がする(しかし、YARVで俺検索しないしな)。たとえば、エロサイトばかり見ていたら(略)。
気づかないうちに登録してたのかなぁ。
GC か! と思ったけど、さっきのプログラムで GC は起こらないしな。
そういえば GC が起こる! inject では、繰り返しのたびに毎回配列を作っているような気がする!
ハッシュとか考えないで、Rinda でいいんかいな。そんな気がする。
てか、今やってるやつって Rinda を使えばスグにできたような気がするなぁ。凹むなあ。
というわけで、やり直し。
結果: http://www.atdot.net/fp_store/luv0bj.file/graph.png
######################################################### # Ruby require 'benchmark' def m print Benchmark.measure{ yield }.real, "\t" end n = ARGV[0] ary = nil sum = max = nil sign = 1 m{ ary = Array.new(n.to_i){|i| sign *= -1; i * sign} } m{ sum = ary.inject{|r, e| r + e } } ######################################################### # Ruby2 require 'benchmark' def m print Benchmark.measure{ yield }.real, "\t" end n = ARGV[0].to_i arys = ary = nil sum = max = nil sign = 1 div = 4 m{ ary = Array.new(n){|i| sign *= -1; i * sign} arys = (0...div).map{|i| s = i * n/div e = (i+1) * n/div ary[s...e] || [] } } m{ sum = arys.map{|ary| ary.inject{|r, e| r + e } || 0 }.inject{|r, e| r + e } } ######################################################### # Ruby3 require 'benchmark' def m print Benchmark.measure{ yield }.real, "\t" end n = ARGV[0] ary = nil sum = max = nil sign = 1 m{ ary = Array.new(n.to_i){|i| sign *= -1; i * sign} } m{ sum = 0 i = 0 len = ary.length while i < len sum += ary[i] i += 1 end }
Ruby2 は4分割してみただけ。4分割することで、GCの範囲がn/4になるかと思ったら、そういえばn/4 が 4 個あるんだから変わらないか。
Ruby3 は while でまわす(inject を使わない)ので GC は起きない。別に each でも良かったか。
結果は圧倒的に Ruby3(injectを使わない)が速い。
というわけで、GCのせいで O(n^2) になっていたってことでいいんだろうか:
こういうのを見ると、世代別GCを入れたくなりますねぇ。
一応 RubySum の要素ごとの差(Ai+1 - Ai)を見てみる。
http://www.atdot.net/fp_store/7zw0bj.file/graph.png
なんとなく等加速しているような気がする。
しかし、これは Ruby の実装を知らないとわからないよな。恐るべし Ruby。
ところで、Excel のマクロを作って fpc でアップロードするようなものを作って、1クリックでウェブ上にアップするようなものを作ったのだけれど、これをどのブックでも使えるようにする方法がわからない。
Excelでは、マクロはブック(Excelのファイル)に属する、ということで、Excelアプリケーション自体の拡張ではないらしい。だけど、このマクロはどんな場合でも使いたい。
さて、どのファイルについても同じマクロを使いたい場合、どうすればいいんでしょう。毎回インポートするのは嫌だ。
ちなみに、そのマクロ(選択しているグラフを z:\graph.png というファイルに export してから fpc でアップロードする):
Sub saveg() ActiveChart.Export ("z:\graph.png") Shell ("ruby.exe fpc.rb z:\graph.png") End Sub
出来た。マクロの保存先を「個人用(Personal.xls)」というものにしておけばいいらしい。
each と while では、each のほうが速かった> sum
ブロックの実行は、まだまだ駄目やなぁ。
load と dump をうまいこと書けば、うまいこと Rinda と組み合わせることが出来そうだなあ。
どうやら2次関数(以上?)に近似しているように見える。
そうかなあ。後のほうだけ見るとほぼ直線なような。 飛び飛びで良いから、もっと大きな値まで測るとわかるかも。 単に、小さいときはキャッシュがヒットして速いとか?
手元で測定してみました http://zunda.freeshell.org/d/20061228.html#p03 配列のインデックスの型などが関係してたりはしませんか?
inject では、繰り返しのたびに毎回配列を作っているような気がする!
ゑ! そうなの?
作る配列のサイズがnに比例するんなら、そりはGC関係なくO(n^2)でしょう。
ブロックを呼び出すためにブロック引数を渡すときに利用する配列(この場合2要素の配列)を作ります。
若手の会で僕がGRINEditを登録していることを言った気がするんで、その時に登録したのでは。←グーグルアラート
う、全然覚えてない。
n*Ci + (n * Pg) * Cg * n
GC回数がnに比例し、1回のGCのコストが生きてるオブジェクトのサイズ合計に比例するってことね。
そういう場合は、生きてるオブジェクトのサイズ合計の比率が一定になるように、nに応じてヒープサイズを増やしてやればよいのだが。
初めて神田食堂に行ってみた。
初めて dRuby をまともに使ってみた。いや、まともじゃないか。まだ toy。
で、テストがかけないんだよな。どうしたものか。
http://www.rubyist.net/~matz/20061221.html#p01
なんか、こんなのを今作っていたりする。お仕事で。Ruby で。
パイプライン処理が出来ないんだよな。どうしよう。うーん。もう一つプリミティブが必要だ。キューかなぁ?
ハッシュなんてどうかなぁ。新しそうだが、何するのかよくわかんないな。やっぱりキューかなぁ。
FUSE + gpg で暗号化ファイルシステム。ただし復号は出来ません。
なんてのを考えてみた。
echo foo | ssh ... cat
みたいなことが出来るというのは知らなかった。へーー。
http://www.dadd9.com/tech/networkadmin_02.html
dd をはさむ理由が、やっぱりよくわからなかった。
RHG で、重複したモジュールの include 問題について聞いてみた。
大体こんな感じだった。
1 が楽でいいよな。多分、従来のものからたくさん例外が出てきそうだが。
実装を言い訳にするつもりは無いので、「やっぱりこういうのが使いやすい」というふうに議論してもらいたいものである。
今年はクリスマスなテーマのtDiaryな日記を見なかったような気がする。なんでだろ。
女子大の先生って色々大変なんだろうなぁ。
PGP秘密鍵のパスフレーズを忘れてスゲーあせる。で、思い出す。なんてパスフレーズ付けるんだ俺。
CGI でアップロードしたファイルを gpg で暗号化して送るというようなものをちょっと作る。www-data 用に鍵輪を用意しているのがとても気持ち悪い。
最近、まつもとさんは何所にでもいるような気がするなぁ。イベントに呼びたいような、まつもとさんレベルの開発者が、他にほとんどいないってことなのか。
今日は RHG 読書会で JavaScript のお勉強をします。
まぁ要するにRHG忘年会なわけです。
いやー、素晴らしい。
defined? は、実は本当はもうちょっと頑張らないといけないような気がするんだけど、てきとーでいいや、という場合は、
begin expr rescue Exception false end
みたいな実装になっていたりする。
RHG。
JavaScript は改行と空白は違うものらしい。return expr は、return の後ろに改行してはいけないらしい。
return x;
return x; // return の意味(x は無視)
は意味が違うということに驚愕。なんだこれは。
a = b = "1" a + b - a * 1
これは凄い。
"1"+"1"-1
こういう意味。
"1"+"2"
と
+"1"+"2"
と
+("1"+"2")
とか。
よくわからないんですけど、Rubyも同じじゃないんですか? > returnの解釈
セミコロンが入りそうな文脈だったらセミコロンがあることになってしまう、ってトコですね
Rubyと部分一致(改行!=空白)するから「驚愕」ということでは>みずしまさん
JavaScript だと +"1" は 1 になるんですか。Awk とか Perl といっしょですね。Flash の ActionScript では明示的に parseInt を呼ばないとだめみたい。数値→文字列の暗黙の変換は ActionScript でもやってくれます。
面白い == わかりやすい、なんだろうか。
ということは、私は面白くない研究をしているんだよなぁ。
わかりやすくする努力は、少なくとも必要だよな。目標と結果がわかりやすいことも、多分重要だ。
面白くてわかりにくいものもありますよね。例えばRHGとか。…あー。例が良くなかったです。わかりにくさを複雑さだと思うと、本質的に複雑で、かつ、面白いものもあると思います。
cvs2svn Statistics: ------------------ Total CVS Files: 3030 Total CVS Revisions: 48491 Total Unique Tags: 165 Total Unique Branches: 19 CVS Repos Size in KB: 71559 Total SVN Commits: 11401 First Revision Date: Fri Jan 16 21:13:04 1998 Last Revision Date: Mon Dec 18 08:37:49 2006 ------------------ Timings: ------------------ pass 1: 58 seconds pass 2: 0 seconds pass 3: 19 seconds pass 4: 0 seconds pass 5: 5 seconds pass 6: 18 seconds pass 7: 0 seconds pass 8: 0 seconds pass 9: 1343 seconds total: 1446 seconds
うーむ。
なんか qmail 環境が腐った?
qmail が localhost というアドレスの解決が出来なくなっていたらしい。なんで?
lithium というのが ruby 開発用のマシンなんだけど、ほとんどの ruby コミッタは cvs 限定で利用できるものらしい。しらなかった。ので、変なメールを打ってしまった。
ruby-committers という ML もあるらしい。そっちでやれば良かったのに、と言われたけど、知らんし。そもそもコミッターじゃねーし。
コミッターじゃないのに、こんなに色々するほうが悪いってことなんだろうか。そうかも。
とりあえず、焦っただけ意味が無かったらしい。あんまり、マージとか考えず、粛々と開発を進めろって感じか。
結局新マシンになるまで svn はお預けということになりました。
.htaccess / .htpasswd だと、メンバー管理がやっぱり大変(一元管理がすごくしづらい)。素直に db というか rails 使えばよかったか。デプロイが大変だった。
テスト 0 だしな ...。
http://www.rubyist.net/~matz/20061205.html#c06
真のスレッドってなんですかね。
http://www.rubyist.net/~matz/20061206.html#p05
(Common) Lispは、真の言語を取り扱えない劣った人々がアイディアを取り込んでくる言語である
(Common) Lisp 以外の「真の言語」を取り扱えない劣った人々が〜 というように読んでしまった。つまり、(Common) Lispを使っている人 == 劣った人々。
どうにも文脈と違うよなぁ、と思って、気づくわけですが。
http://q.hatena.ne.jp/1164980977#a645621
さっき卜部君に聞いた。いやー、これで満足な回答なのか。素晴らしい。
perlすら出来ない俺はダメダメ。だからRubyなんかで(ry
どこぞで学会なんてなんで必要なの、論文なんてウェブで勝手に上げればいいじゃん、という話があった。うーん、そうかも、と思う反面、とてもいい加減な情報ばかりが出回っている(出回らせている一人かもしれない)現状では、それ(ウェブで勝手に)でいいとは思えない。
といいながら、最近はURLを参考文献に含めることが多くなってきたな。もうすぐWikipediaを参考文献にひくこともあるんだろうか...。
少なくとも、ほってんとり==貴重な情報、信頼できる情報ではないという感想。
もちろん、分野によるとは思います。
毎度毎度素晴らしい。
長くなったのでこちらでコメントを。
superとメソッド呼び出しとの違いは、おおまかには、invokesuper命令を使うかsuper命令を使うか、だけです。なので流れは先週と一緒ですね。コンパイル後の命令列は、以下の順番です。
-> invokesuper命令 or send 命令
ローカル変数は書き換わるかもしれないですが、その場合は書き換わった値が渡る...
仕様が整理されました。
前回の宿題として、「この parent_block & 1 ってなんだろう?」が残ってました。じつは未だによくわからないんですけど、これは ブロックと Proc オブジェクトの分離 関係、かな。
ここは盲腸みたいなコードだったので整理しました(消しました)。NODE構造が変わったので。
::ありの場合は少しややこしいですが、定数も基本は getconstant 1命令へコンパイルされます。ただし、「定数インラインキャッシュ」の最適化が有効になっていると、こんな感じの3命令になります。
http://jp.rubyist.net/magazine/?0010-YarvManiacs 参照。実は、getconstant 命令は1命令にはなりません。前にスタックに一つ詰まれていることが前提になります。
insns.def より
/** @c variable @e get constant variable id. if klass is Qfalse, constant is able to access in this scope. if klass is Qnil, get top level constant. otherwise, get constant under klass class or module. @j 定数を得る。klass が Qfalse なら、そのスコープで得られ る定数を得る。Qnil なら、トップレベルスコープを得る。 それ以外なら、klass クラスの下の定数を得る。 */ DEFINE_INSN getconstant (ID id) (VALUE klass) (VALUE val) { val = eval_get_ev_const(th, GET_ISEQ(), klass, id, 0); }
ここでいう「スタックに一個つまれている」というのは、二個目の括弧内にある klass ですね。
で、getinlinecache 命令に失敗すると、nil が積まれます。
って、これコメント逆だ。nil ならカレントスコープから検索。
組み込み変数(Rubyリファレンスマニュアル - 組み込み変数)のうち、ほとんどはgetglobal命令で値のとれる、グローバル変数です。ただし、正規表現マッチで使われる$1,$2,...だけは他のグローバル変数とは区別されて、getspecialというYARV命令に落ちるようです。
厳密にはグローバル変数ではなく、組み込み変数(メソッドローカル)なんですね。あと、$~ なども同様ですね。
変数の項でまとめる話じゃないかもしれませんが、resuce節で変数と例外のクラスを宣言した場合、NODE_ERRINFOというノードがくっついてきます。詳細略ですが、getglobal $! して、クラスチェックをした後変数vにsetdynamicするコードにコンパイルされています。
関係ないんだけど、getglobal $! なんて出てきたっけ?(自信のない作者) ... $! って NODE_ERRINFO にならないのか! なんてこった! パーサ変わったのかな。
それはともかく、この部分は面倒ですね。とりあえず、setdynamic するコードにはコンパイルしません。クラスもチェックしてないんですよね。
begin raise rescue Exception => e end #=> compile 0000 getinlinecache <ic>, 7 ( 4) 0003 getconstant :Exception 0005 setinlinecache 0 0007 getdynamic #$!, 0 0010 send :===, 1, nil, 0, <ic> 0016 branchunless 25 0018 getdynamic #$!, 0 ( 5) 0021 dup ( 4) 0022 setlocal e 0024 leave 0025 getdynamic #$!, 0 0028 throw 0
しかし、こんなんでよく動いていたな。$! へのアクセスは NODE_ERRINFO になるとばかり思っていた。ガーン。コンパイル時にチェックするようにしようかな。
というわけで、こういう簡単なループがブロックで書かれているときは、while文に変換されます。
実はされません。とても微妙なバグがあるため、この機能はオフになっています。ただ、3.times みたいなのは決めうちで while にしてもいいのかもしれませんね。そうしちゃおうかなぁ。
x.times{...} #=> eval x timescheck Fixnum, times, lnormal # x が Fixnum で、Fixnum#times が再定義されていないかチェック 3回while loop jump lend lnormal: send :times, ... lend:
みたいな。こんな単純には行かないかも。
しかし、俺今日未踏のキックオフで喋らないといけないんだが、こんなことしてていいんだろうか。
発表終わり。なんか、締切りドリブン。
こんにちは!コメントありがとうございます。毎度ツッコミビリティ高くてすみません。 クラスチェックというのは(用語が正しいかどうかよくわからないのですが)、rescue Klass => e のときの、Klass===$! かどうかの判定
0010 send :===, 1, nil, 0, <ic> 0016 branchunless 25
を指すつもりで書いてました。この意味ではチェックしてますよね。
論文とウェブのいいとこ取りがあればいいんだと思う。 ウェブで発表するときにある程度きちんと概要とかキーワードとか参考文献を書いて、学会が論文別刷り代より安価な金額で専門家によるレビューをしてどれくらいの有用度かを評価・保証してくれるサービスを提供して、文科省や大学がそのウェブ発表も業績として評価するようになればいい。
まだそんな時代は来ないと思うけど。特に3番目が厳しそう。
学会に頼らないでもソーシャルブックマークにマイナス点と評価者の評価を入れればいいのかもなぁ。でもそういうサービスだと「どこの誰が評価したかわからないから参考にならない」って言われそう。
常にコンテンツが書き換えられる可能性があるWikipediaが参考文献ってどうなんでしょうね。リファレンスのさいはリビジョンまで指定すれば済むのかなぁ・・・。
サイトへのリンクも、同様の問題があるのですよねぇ。
samidare が新しいRubyスレを捕捉してくれた
http://pc8.2ch.net/test/read.cgi/tech/1164885714/
うーむ、YARV の話、というか未踏の話が出ている。
未踏取りすぎ、というのは自分でもその通りだなぁ、と思わなくも無い感じです。すみません。いや、すみません、じゃなくて、税金出した分は納得してもらえるだけの成果を出したいと思っております。
ただ、未踏は成果を無理やり出すために本末転倒なことにはならないので、欠点にはならないと思います。というか、ちょうどいい締め切り効果になって、良い感じです。
さて、私は未踏を取ったほうがよかったでしょうか。それとも、良くなかったでしょうか。
とても久々に未踏スレを見てみた。
http://pc8.2ch.net/test/read.cgi/prog/1127857952/405
これの採択レベルがよーわからんのだけど Ruby2のランタイムエンジン作ってる人のレベルだと この企画のどこらへんのレベルなの?ぎりぎり?
ギリギリな予感。
未だに CGI というか、ウェブ関係のセキュリティについては勉強しないといけないなぁ、という感じなのですが、高木先生の日記を久々に見て、やっぱり自分はわかっていないなぁ、と思った。
http://takagi-hiromitsu.jp/diary/20061115.html
高木: やはりね。対策なんだけど、既存の秘密情報がパスワードしかない。ユーザ名はCGIの「HTTP_USER」で取れるんだけど、パスワードって取れないの?
「HTTP_USER」ってなんだろう orz
大岩くんは、CGIでBasic認証のパスワードを取得できないようになっている理由を説明した。
どこかに説明あるかな。ぐぐったら BASIC 認証をするための方法がわらわら出てきて orz
高木: そうだね。ただ、弱いキーが設定された場合はユーザの責任にできる。そうすると、Refererチェックの方がよい場合もあることになるんだけど……
そうすると、の接続がわからなかった。
大岩: Referer方式は、同じホスト上のページに罠があるとチェックになりませんね。tDiaryは日記ですから。でも、これは POSTに限定することで防げますね。
罠って何を想定してるんだろ。tDiaryは日記だから何だろ。
CSRFをきちんと理解していないだけなのかな。
もちろん、会話形式なので、厳密な議論を掲載するのが意図じゃないとは思うのだけど、わからないことばかりで、やっぱり自分がわかっていないことを再認識する結果になった。
世の中のプロ、というか外にサービスを出している人はこういうことを常に意識しているのだなぁ、というか、自分もサービスを書いていないことも無いので、きちんと意識しないといけない。というか、この日記大丈夫なのか。
最後のほうの議論で、Refererを改変できちゃうのは脆弱性か云々、というところ。何に対してどう脆弱なのかわからなかった。
こないだたださんが撮っていた写真を上から。
というか、なんか踊っている人たちが居る。
お節介ですみません。 http://www.ipa.go.jp/security/vuln/websecurity.html ここのpdfの資料がとても参考になると思います。
class C def ===(o) p o end end begin raise "foo" rescue C.new rescue end
... ただ単にチェックをサボっているだけなんですが。やっぱりエラーになんなきゃだめでしょうか。
begin raise rescue rescue end
って合法なんだね。知らなかった。
うささんからの出題。
begin; raise Object; rescue; p $!; end begin; raise Object; rescue Class; p $!; end begin; raise; rescue Class; p $!; end それぞれどうなるでしょう。
http://www.rubyist.net/~matz/20061205.html
物書き
ちょっ。
マルチスレッドプログラムで fork は危険、というのは認識していたけど、「使えない」という認識は無かった。
#include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <stdio.h> void test(void); void * thread_func1(void *dmy) { printf("thread_func1 start on %d\n", getpid()); sleep(5); printf("thread_func1 finish on %d\n", getpid()); return 0; } void test() { pthread_t tid; if (pthread_create(&tid, 0, thread_func1, 0) != 0) { perror("pthread_create return non-zero"); exit(0); } sleep(1); // sched_yield(); // pthread_join(tid, 0); } int main(int argc, char *argv) { int pid; test(); pid = fork(); if (pid == 0) { /* child */ test(); } else { wait(); } pthread_exit(0); return 0; }
マルチスレッドプロセス上で fork しているだけなんですが。
NetBSD では、子プロセスでの pthread_create が core を吐くそうです。うぇぇ。
これをされてしまうと、YARV では、NetBSD 上で fork が出来ない、という悲しい事態に。
あー、それはNetBSD側がわるいんじゃないでしょうか。 NetBSDのスレッドライブラリは変態すぎます。
NetBSDはスレッドの管理をmmap領域の頭に置いて管理しています。 forkする時は「(mmap領域はそのまま放置して)スレッドスケジューラを停止させる」 みたいです。 forkした子供がpthread_createすると再び凍っていたスレッドスケジューラが息をふきかえすのですが、当然放置されていたmmap領域が悪さをすると思います。
NetBSDの場合、forkしてexecせずに再度スレッドを使う場面は想定していなさそーです。 あー。
なるほど。ちなみに、他の環境でのレポートキボン。
FreeBSDもNetBSDに似たKSEってなのを使っているんですが、同様の症状が起きないか不安ギミとか
YARVソースコード勉強会 まとめが出来てる。素晴らしい。
しかし、Rails のコードを読めば、書籍への引き合いもあっただろうに、と思うと大変申し訳なく思わなくも無いです。
Google Developer Seminarに行ってきた。
目的のディナーがしょんぼりだった。
セミナーの内容は、まぁドキュメント読めばわかる内容か。
金田さんにお会いすることが出来た。
しかし、日本Rubyの忘年会って凄い。関東ローカルじゃなくて、日本。
if-pre-up.d が起動時に動かなかったのは shebang が無かったかららしい。
shebang は shbang では無いらしい。
う、たしかに>日本 日本Rubyの会とかけたつもりだったんですけどやり過ぎ感がありますね。これで関西で開かれなかったりしたらやだなぁ
shebang というのはふつうの英単語なのです。意味は小屋とか。ちなみにアクセントは後ろにあるので、ときどき見かける「しーばん」という読みは実は誤りくさいです。
しばーん?
シャリバン?(違
英辞郎によると「sharp + bang」(# + !) と言うことで、発音はシバンだそうです。
へぇ。#を "sharp" って読ませるの、珍しいですね (USだと"pound sign"が普通。"sharp" と言って通じなくはないだろうけど、たぶん一瞬「へ?」って顔をされることが多いんじゃなかろうか)
ハッシュバンっていう呼び方もするみたい(説明文ではnumber signと書いているところがおもしろい)。http://en.wikipedia.org/wiki/Shebang_(Unix)
Etch RC1 をインストールしてみたら、/etc/init.d/iptables が無くて困った。まだ困ってる。どうしよう。なんで無くなったんだろう。便利だったのに。
exim4 をそのまま使ってみるが、設定が全然わからない。なんだ、.conf.conf って。
あとは、特に苦労なく。あ、そもそも sarge が DELL マシンで SATA HDD だったので入らなかったというのがあった。
暗号化とか、セキュリティとかは、特に気にしないでいい、ということになったみたい。... いいのかなぁ。
暗号化ファイルシステムは導入してみたいが、どうやるんだろう。
cgi.rb でファイルのアップローダー。モデルも何もかも1クラス1ファイル。うーん。関数型(絶対違う)。
せめて、モデルは別クラスにしたほうがよかったかな。
Rails だと、erb部分(view)のテストとかもできるのかなぁ。どうなんだろ。
仮想化実装技術勉強会だった。
IA64版かー。どっちかというと、仮想化の前にコンパイラ技術な気もする。
Sunのまくにーり会長の講演会を聞く。さっぱりわからんかった。英語が。
RailsかCGIか悩むが、とりあえずCGIで作る。4時間くらい。どちらかというと content-type をどうするか、とかに悩んだ。
Rubyの本読書会。班分けはまずまず成功だったのではなかろうか。
しかし、やっぱりつらいな、これは。もっとゆるゆるとやる方法は無いだろうか。
まだ全然消化できていない.ヤバス.
2007年がどうの,っていうのは気にしないでも,こっちが勝手に2007年的だ! と解釈するような気がするので,ぜひともご応募お願いします>RubyKaigi2007
2006もRuby会議にしようって言ってたのを頑なに拒んでいた高橋さんは、どういう心変わりがあったんだろう。
休日は本当に休日でダラダラしていた。なんとも、申し訳ない。
偉い人の前でしゃべるのはつらいな。しかも、全然ここにいる意味がわからない俺が。
偉い人の偉い人である所以は、やはり受け答えが自信満々なことなんだろうなぁ。
カーネル読書会。ロシアのかたによるOpenVZなどの紹介。面白かった。ロシアの方の英語はとても聴きやすい。
生yooseeさんに会った。
スーツを受け取りにいくついでに髪を切る.その前に本屋で失踪日記,うつうつ日記,監督不行届をかう.失踪日記は,どっかで読めないかなーと思ってたんだけど,結局読めていないので買うことにした.さて,今の季節に研究室に置いておくのは,やっぱり問題があるだろうか.
明日はスーツか.気が重い.ネクタイ絞めれるんだろうか.
http://jp.rubyist.net/RubyKaigi2007/
RubyKaigi2007,やります.どうぞお楽しみに.プレゼン応募してね.こんなの考えてるんだけど,どうだろう,みたいな話があったらぜひご相談を.
とりあえず青木さん,応募しといて.
僕もいつもネクタイを締めるのに苦労します。
ダビンチコードをつい全部読んでしまった.
gauche って左って意味なのか.
スーツを,結局半額のチラシが入っていた青山で買ってしまった.
4.5万円.もっと安いものでも良かったんだが.
某髪の毛がうねうねして踊ってるやつを見る.全然意味わからん.
一段落ついたので溜まっていたことを消化しないと.
未踏の説明会,の後の交流会だけ参加.ただ飯を食いに行ったんだが,30分遅れたらすでにご飯がほとんど無かった.しくしく.
酒徳さんとか,松原さんとかとお話.
その後池田さんによる二次会.毛利さん,岡田さん,石原さん,竹内さん,杉山さんらと.なんか,日本や世界の各社社会とか,そういうめったに聴けない話が聴けた.だから未踏は面白い.
オンラインサービスでひとつネタがあるんだが、どうかね?
どんなんよ。それはともかく合コン。
ささださんが飢えてる♪
っ[恋するプログラム 〜Rubyでつくる人工無脳]